假设我有一个单例经理

 class Manager {

    static let sharedInstance = Manager()

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

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

如果我做
Manager.sharedInstance.text = "world"

文字仍然是“你好”
但如果我做两次,第二次就是世界

最佳答案

它工作正常。

你所经历的行为可以用 2 个事实来解释

事实 1

由于 Apple says didSet(以及 willSet)是 而不是 init 期间调用。



事实 2
didSet 的参数确实引用了 旧值 ,所以你应该

  • value 重命名为 oldValue
  • text
  • 中使用 print
    所以从这
    didSet (value) { print("didSet \(value)") }
    

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

    相反,在您的代码中,您正在打印旧值(已被覆盖的值)。

    关于swift didSet 未在单例中调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34086699/

    10-11 22:07