Swift属性观察者 - didset vs willset的例子使用

时间:2018-04-24 15:46:57

标签: swift properties observer-pattern

我熟悉属性观察者的意义以及如何使用它。 但是,我真正不明白的是何时使用它们。 在我看来,这没关系.. 如果我使用didset,我可以使用属性本身使用oldValue或新值。如果我使用的是willset,我可以使用属性本身使用newValue或旧值。 所以.. oldValue在didset中它就像在setset中的属性本身一样,而newValue在willSet中就像属性本身在didset中一样:

var propObserve = 1 {
    willSet {
       print("my previous value was \(propObserve) and my future value will be \(newValue)")
    }

    didSet {
       print("my previous value was \(oldValue) and my future value will be \(propObserve)")
    }
}

propObserve = 2

我将从每个人那里获得相同的印刷品。 我理解willSet执行之前,并且在使用新值设置属性之后执行didSet但是,我仍然可以在两种情况下使用新旧值(在willSet和didSet中)

Q1:何时更喜欢使用一个而不是另一个? Q2:你能给我一个具体的例子吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

每种情况都有很多用例,但这里有几个例子。

使用willSet对新值执行验证,将其限制为某个数值范围,将其四舍五入,或将其保存为以前值的历史记录。使用willSet使程序员能够在赋值之前更改值。

使用didSet在值更改后执行任何操作,例如更新用户界面,重新加载表视图,将某些内容记录到API或更改其他相关值。使用didSet分配值并允许根据该分配采取操作。

在其他一些用例中,要么就足够了。