我有一个示例类和一个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。 :)

08-27 19:37