swift didSet没有在单身人士中调用

时间:2015-12-04 10:54:57

标签: swift

假设我有一个单身经理

 class Manager {

    static let sharedInstance = Manager()

    var text: String {
        didSet (value) { print("didSet \(value)") }
    }

    init () {
        self.text = "hello"
    } 
 }

如果我这样做

Manager.sharedInstance.text = "world"

文字仍然是'你好' 但如果我做了两次,第二次是世界

1 个答案:

答案 0 :(得分:3)

工作正常。

您经历的行为由2个事实解释

事实1

由于Apple says didSet(以及willSet)在init期间被调用。

  

willSet和didSet观察者提供了一种观察(和   当变量或属性的值为时,适当地响应)   被设定。变量或属性时不调用观察者   首先被初始化。相反,它们仅在值为时被调用   在初始化上下文之外设置。

事实2

didSet的参数确实是指旧值,所以你应该

  1. value重命名为oldValue
  2. text
  3. 中使用print

    所以从这个

    didSet (value) { print("didSet \(value)") }
    

    到这个

    didSet (oldValue) { print("didSet \(text)") }
    

    而是在您的代码中打印旧值(已被覆盖的值)。