Swift对存储属性的适当处理(willSet / didSet)

时间:2018-07-06 06:48:00

标签: swift

对于存储的属性,我们使用 willSet didSet 之类的观察器。 这使我们可以跟踪对该属性所做的任何更改。

首先调用willSet,更改属性,然后调用didSet。

问题是:如何处理财产的输入?

我看到的所有示例都在 didSet 中执行,这意味着属性先更改,然后由 if / else 中进行了检查。 didSet ,如果符合条件,则再次更改

var life: Int = 0 {
    didSet {
        if life >= 1000 {
            life = 999
        }
    }
}

我们不能只检查 willSet 中的条件是否输入,如果匹配则更改它(不作两次更改)?如果是,请提供一个非常简单的示例。

还是唯一的方法是使用 didSet

编辑:看来人们不理解我要问的问题。

1)我只想使用存储的属性

2)我想知道-如我已经指出的,我可以在不使用didSet 的情况下更改willSet 中的属性吗?您提供的链接涵盖了我已经知道的didSet解决方案。

如果是-然后提供示例,如果没有,那么我已经知道了。

1 个答案:

答案 0 :(得分:0)

设置新值后调用

didSet。 在设置新值之前将调用willSet

struct animal{
var name: String
}

var dog:animal?{
didSet{
print("called setting a new value")
if var newName = person?.name?{
print("new name is\(newName)")
}
}
willSet(myNewValue){
if let myNewName = myNewValue.name?{
print("new name is\(myNewName)")
}
}
}