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

时间:2015-04-05 03:14:23

标签: 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 this to be printed after changing number in test")
    }
}

test.number = 1 // Nothing happens

1 个答案:

答案 0 :(得分:8)

没有任何事情发生,因为观察者在test上,这是一个Foo实例。但是您更改了test.number,而不是test。 Foo是一个类,类是引用类型,因此它的实例是可变的。

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

或者,将println语句添加到其他 didSet,这是您已经在Foo的number媒体上获得的语句。

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