What is the difference between willSet
- didSet
, and get
- set
, when working with this inside a property?
From my point of view, both of them can set a value for a property. When, and why, should I use willSet
- didSet
, and when get
- set
?
I know that for willSet
and didSet
, the structure looks like this:
var variable1 : Int = 0 {
didSet {
println (variable1)
}
willSet(newValue) {
..
}
}
var variable2: Int {
get {
return variable2
}
set (newValue){
}
}
When and why should I use willSet/didSet
willSet
is called just before the value is stored.didSet
is called immediately after the new value is stored.Consider your example with outputs:
var variable1 : Int = 0 {
didSet{
print("didSet called")
}
willSet(newValue){
print("willSet called")
}
}
print("we are going to add 3")
variable1 = 3
print("we added 3")
Output:
we are going to add 3
willSet called
didSet called
we added 3
it works like pre/post -condition
On the other hand, you can use get
if you want to add, for example, a read-only property:
var value : Int {
get {
return 34
}
}
print(value)
value = 2 // error: cannot assign to a get-only property 'value'