swift 需要一些关于结构和特别是属性 Package 器的知识

cuxqih21  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(133)
struct XA {

static var xa = "Advanced"

var xb: String {
    didSet {
        XA.xa = oldValue
    }
}}

var objXA = XA(xb: "Turing")
print(XA.xa) // Advanced
objXA.xb = "Swift"
print(XA.xa) // Turing

let objXB = XA(xb: "Quiz")
print(XA.xa) // Turing

字符串
我需要了解这些输出是如何在一点点深度。在最后一行为什么它的打印图灵而不是Swift。

lp0sw83n

lp0sw83n1#

正如Joakim在他们的评论中所说,原因是初始化器不调用didSet/willSet,这是设计使然。
引用Apple Swift电子书(强调由我添加)
当在子类初始化器中设置属性时,在调用超类初始化器之后,将调用超类属性的willSet和didSet观察器。**当类在设置自己的属性时,在调用超类初始化器之前,不会调用它们。**有关初始化器委托的更多信息,请参见值类型的初始化器委托和类类型的初始化器委托。
摘自Swift编程语言(Swift 5.7)Apple Inc. https://books.apple.com/us/book/the-swift-programming-language-swift-5-7/id881256329本材料可能受版权保护。

相关问题