What is the purpose of willSet and didSet in Swift?
callback, didset, property-observer, swift
Solution
The point seems to be that sometimes, you need a property that has automatic storage and some behavior, for instance to notify other objects that the property just changed. When all you have is `get`/`set`, you need another field to hold the value. With `willSet` and `didSet`, you can take action when the value is modified without needing another field. For instance, in that example:
class Foo {
var myProperty: Int = 0 {
didSet {
print("The value of myProperty changed from \(oldValue) to \(myProperty)")
}
}
}
`myProperty` prints its old and new value every time it is modified. With just getters and setters, I would need this instead:
class Foo {
var myPropertyValue: Int = 0
var myProperty: Int {
get { return myPropertyValue }
set {
print("The value of myProperty changed from \(myPropertyValue) to \(newValue)")
myPropertyValue = newValue
}
}
}
So `willSet` and `didSet` represent an economy of a couple of lines, and less noise in the field list.
Problem
Swift has a property declaration syntax very similar to C#'s: ``` var foo: Int { get { return getFoo() } set { setFoo(newValue) } } ``` However, it also has `willSet` and `didSet` actions. These are called before and after the setter is called, respectively. What is their purpose, considering that you could just have the same code inside the setter?