7

我有一个带有属性观察者的类作为属性。如果我更改了该类中的某些内容,是否可以触发 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
4

1 回答 1

10

什么都没有发生,因为观察者是 on test,这是一个 Foo 实例。但你变了test.number,不是test它自己。Foo 是一个类,一个类是一个引用类型,所以它的实例是可变的。

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

或者,将该println语句添加到另一个 didSet,即您已经在 Foo 的number财产上得到的那个。

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

于 2015-04-05T03:43:12.450 回答