对于存储的属性,我们使用 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解决方案。
如果是-然后提供示例,如果没有,那么我已经知道了。
答案 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)")
}
}
}