我通读了这个didSet q&a和Apple的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属性的值作出反应。现在,如果您在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/