假设我有一个单身经理
class Manager {
static let sharedInstance = Manager()
var text: String {
didSet (value) { print("didSet \(value)") }
}
init () {
self.text = "hello"
}
}
如果我这样做
Manager.sharedInstance.text = "world"
文字仍然是'你好' 但如果我做了两次,第二次是世界
答案 0 :(得分:3)
工作正常。
您经历的行为由2个事实解释
由于Apple says didSet
(以及willSet
)在init
期间未被调用。
willSet和didSet观察者提供了一种观察(和 当变量或属性的值为时,适当地响应) 被设定。变量或属性时不调用观察者 首先被初始化。相反,它们仅在值为时被调用 在初始化上下文之外设置。
didSet
的参数确实是指旧值,所以你应该
value
重命名为oldValue
。text
print
醇>
所以从这个
didSet (value) { print("didSet \(value)") }
到这个
didSet (oldValue) { print("didSet \(text)") }
而是在您的代码中打印旧值(已被覆盖的值)。