Swift 当更改类中的属性时,有没有办法让didSet工作?

Swift 当更改类中的属性时,有没有办法让didSet工作?,swift,observers,propertychanged,didset,Swift,Observers,Propertychanged,Didset,我有一个带有属性观察器的类作为属性。如果我在该类中更改了某些内容,是否有方法触发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 thi

我有一个带有属性观察器的类作为属性。如果我在该类中更改了某些内容,是否有方法触发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是一个类,而类是一个引用类型,所以它的实例是可变的

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

或者,将
println
语句添加到另一个
didSet
,这是您已经在Foo的
number
属性中得到的语句


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

当然。。。有时候,我想在几个小时内找到答案,而我本应该用一个结构来解决这个问题。。。谢谢您可能想看看我的书,在书中我总结了值类型和引用类型行为之间的差异:结构引用上的
didSet
对结构属性更改的响应是我给出的第一个示例之一。