willSet 和 didSet 是 Swift 中属性观察器(Property Observers) 的两种机制,用来监听 属性值的变化,在属性被赋新值前后执行代码。它们适用于存储属性(stored properties),不适用于计算属性(computed properties)。
基本语法
var myValue: Int = 0 {
willSet(newVal) {
print("即将把 myValue 改为 \(newVal)")
}
didSet(oldVal) {
print("myValue 从 \(oldValue) 改为了 \(myValue)")
}
}
1、willSet:在新值被赋值之前调用。
默认参数名是 newValue,也可以自定义。
可以用来在属性值改变前执行一些操作。
2、didSet:在新值被赋值之后调用。
默认参数名是 oldValue,表示属性改变前的旧值。
可以用来在属性改变后执行操作,比如更新 UI、同步数据等。
使用方法
var score: Int = 0 {
willSet {
print("Score 即将改变为 \(newValue)")
}
didSet {
if score > oldValue {
print("恭喜,分数增加了 \(score - oldValue) 分")
}
}
}
score = 10
// 输出:
// Score 即将改变为 10
// 恭喜,分数增加了 10 分
注意事项
1、属性初始化时不触发:
var count: Int = 0 {
didSet { print("didSet 被触发") }
}
// 这里 count 初始化为 0 时,不会触发 didSet
总结
willSet用于属性即将被赋新值前,默认参数为 newValue。
didSet用于属性赋值后,默认参数为 oldValue。
相关文章
1、Swift属性观察器触发条件:https://fangjunyu.com/2024/11/15/swift%e5%b1%9e%e6%80%a7%e8%a7%82%e5%af%9f%e5%99%a8%e8%a7%a6%e5%8f%91%e6%9d%a1%e4%bb%b6/
