Swift 当更改类中的属性时,有没有办法让didSet工作?
我有一个带有属性观察器的类作为属性。如果我在该类中更改了某些内容,是否有方法触发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
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
对结构属性更改的响应是我给出的第一个示例之一。