财产观察员及其行为

时间:2016-07-26 10:52:54

标签: ios swift properties swift3

我是一个样本类和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打印语句?请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

在你的didSet中:

if totalSteps > oldValue

但是当你执行anObj.totalSteps -= 1时,总步数不会超过旧值!

因此print未按预期执行。 :)