我熟悉属性观察者的含义以及如何使用它。 但是,我真正不明白的是何时使用它们中的每一个。 在我看来这无关紧要.. 如果我使用 didset,我可以使用属性本身来使用 oldValue 或新值。如果我使用 willset,我可以使用属性本身来使用 newValue 或旧值。 所以.. didset 中的 oldValue 就像 willset 中的属性本身,willSet 中的 newValue 就像 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:你能给我一个具体的例子吗?
提前致谢
最佳答案
每个都有很多用例,但这里有几个例子。
使用 willSet
对新值执行验证,将其限制在特定的数值范围内,四舍五入,或将其保存到以前值的历史记录中。使用 willSet
使程序员能够在赋值之前更改值。
使用 didSet
在值更改后执行任何操作,例如更新用户界面、重新加载 TableView 、将某些内容记录到 API 或更改另一个相关值。使用 didSet
分配值并允许根据该分配执行操作。
在其他一些用例中,两者都可以。
关于Swift 属性观察器 - didset 与 willset 使用的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005913/