Comment on page

属性观察器

属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,即使新值和当前值相同的时候也不例外。
你可以在定义类为存储属性添加属性观察器;也可以为继承父类的存储属性计算属性添加属性观察器
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("将 totalSteps 的值设置为 \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("增加了 \(totalSteps - oldValue) 步")
}
}
}
}
属性观察器中可以使用默认参数newValueoldValue,访问新值和原本的值

newValue不可以修改

newValue是不可以修改的。

在属性观察器中访问属性不会调用到属性观察器

class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("将 totalSteps 的值设置为 \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
totalSteps = oldValue // 可以修改新赋的值
}
}
}
}

存储属性的初始化不会触发属性观察器

存储属性在定义时提供初始值或者在构造器中初始化不会触发属性观察器