我通读了这个 SO didSet q&a和苹果的 Property Observers和其他一些帖子。我似乎无法理解的是,如果您在不使用属性观察器的情况下更改变量,它无论如何都会改变,那么在改变变量时使用 didSet 有什么好处?
场景 1:
var someVal = 0
someVal = 10
// someVal now holds 10
场景 2:
var someVal: Int = 0{
didSet{
}
}
someVal = 10
// again someVal now holds 10
场景 3:
var someVal: Int = 0{
didSet{
if someVal > oldValue{
someVal = newValue
}
}
}
someVal = 10
// once again someVal holds a value of 10
我在场景 3 中唯一看到的是,如果不满足条件,则 someVal 不会改变。但是我可以简单地这样做而不是将它添加到 didSet 中,并且会发生完全相同的事情。
var someVal = 0
var anotherVal = 10
if someVal < anotherValue{
someVal = anotherValue
}
// once again someVal holds a value of 10
那么除了在 didSet 观察者中添加一个条件还有什么好处呢?
最佳答案
嗯,它是一个观察者。很多时候您想对更改 viewController 属性的值使用react。现在,如果您在 10 个不同的地方修改该属性,您不必复制/粘贴相同的代码 10 次不同的时间 - didSet
观察者会处理这个问题。
例如:
var someVal: Int = 0 {
didSet {
somePostprocessing()
}
}
someVal = 10
// a bit later
someVal = 15
// etc.
优于:
var someVal: Int = 0
someVal = 10
somePostprocessing()
// a bit later
someVal = 15
somePostprocessing()
// etc.
在第一种情况下,您可以确定只要值发生变化,就会发生后处理。在第二种情况下,即使我们愿意接受复制/粘贴(这是不行的),您如何确定在每次修改值时都不会忘记添加 postProcessing?
关于ios - 当你可以改变一个变量并且值无论如何都会改变时,为什么要使用 didSet 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816846/