swift-属性观察者
2021-08-24 本文已影响0人
GitArtOS
属性观察者
会观察并对属性值的变化做出回应。每当一个属性的值被设置时,属性观察者都会被调用,即使这个值与该属性当前的值相同。
你可以在如下地方添加属性观察者
:
- 你定义的存储属性;
- 你继承的存储属性;
- 你继承的计算属性。
对于继承的属性,你可以通过在子类里重写属性来添加属性观察者。对于你定义的计算属性,使用属性的设置其来观察和响应值变化,而不是创建观察者。
你可以选择将这些观察者或其中之一定义在属性上:
-
willSet
会在该值被存储之前被调用。 -
didSet
会在一个新值被存储后被调用。
如果你实现了一个 willSet 观察者
,新的属性值会以常量形式参数传递。你可以在你的willSet
实现中为这个参数定义名字。如果你没有为它命名,那么它会使用默认的名字 newValue
。
同样,如果你实现了一个didSet观察者
,一个包含旧属性值的常量形式参数将会被传递。你可以为它命名,也可以使用默认的形式参数名 oldValue
。如果你在属性自己的didSet 观察者
里给自己赋值,你赋值的新值就会取代刚刚设置的值。
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps
stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps
stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps