在 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;更改结构 属性 会 替换结构,因为结构是值类型,而不是引用类型。
我有一个 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;更改结构 属性 会 替换结构,因为结构是值类型,而不是引用类型。