我通读了这个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/

10-09 13:12