在 class 中更改 属性 时,有没有办法让 didSet 工作?

Is there a way to get didSet to work when changing a property in a class?

我有一个 class 作为 属性 和一个 属性 观察者。如果我在 class 中更改某些内容,是否有办法触发 didSet,如示例所示:

class Foo {
    var items = [1,2,3,4,5]
    var number: Int = 0 {
        didSet {
            items += [number]
        }
    }
}

var test: Foo = Foo() {
    didSet {
        println("I want this to be printed after changing number in test")
    }
}

test.number = 1 // Nothing happens

没有任何反应,因为观察者在 test 上,这是一个 Foo 实例。但是你改变了 test.number,而不是 test 本身。 Foo 是一个 class,而 class 是一个引用类型,所以它的实例是可变的。

如果您想查看日志消息,请将 test 自身 设置为不同的值(例如不同的 Foo())。

或者,将 println 语句添加到 other didSet,你已经在 Foo 的 number 属性.

或者,使 Foo 成为结构而不是 class;更改结构 属性 替换结构,因为结构是值类型,而不是引用类型。