我有一个示例类和一个Int
类型的属性,如下所示:
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("about to set steps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
}
现在,当我创建此类的实例并为var
totalSteps
分配一个数字时,如下所示:let anObj = StepCounter()
anObj.totalSteps = 2000
我得到预期的控制台输出:
about to set steps to 2000
Added 2000 seteps
但是当我执行
anObj.totalSteps -= 1
时,我只得到willSet
输出,上面写着about to set steps to 1999
,而且didSet
从未执行。发生了什么,为什么我没有执行willSet
打印语句?帮忙,谢谢。 最佳答案
在didSet
中,您有:
if totalSteps > oldValue
但是,当您执行
anObj.totalSteps -= 1
时,总步数不大于旧值!因此,不按预期执行
print
。 :)