I have a class as property with a property observer. If I change something in that class, is there a way to trigger didSet as shown in the example:
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
Nothing happens because the observer is on
test
, which is a Foo instance. But you changedtest.number
, nottest
itself. Foo is a class, and a class is a reference type, so its instances are mutable in place.If you want to see the log message, set
test
itself to a different value (e.g. a differentFoo()
).Or, add the
println
statement to the otherdidSet
, the one you've already got on Foo'snumber
property.Or, make Foo a struct instead of a class; changing a struct property does replace the struct, because a struct is a value type, not a reference type.