快速适当地处理存储的属性(willSet/didSet)



对于存储属性,我们使用willSetdidSet等观察器。 这使我们能够跟踪对该属性所做的任何更改。

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

问题是:如何处理属性的输入?

我看到的所有示例,都在didSet中执行此操作,这意味着属性首先更改,然后由didSet中的if/else检查,如果确实符合标准,则再次更改

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

我们不能只检查willSet中的输入条件并在匹配时更改它(没有双重更改(吗?如果是,您能否提供一个非常简单的例子。

或者唯一的方法是使用didSet

编辑:看起来人们不明白我想问什么。

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

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

如果是 - 那么提供示例,如果不是,那么我已经知道如何做。

设置新值后调用了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)")
}
}
}

最新更新