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。
1条答案
按热度按时间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本材料可能受版权保护。