Swift属性观察器willSet和didSet
Swift属性观察器willSet和didSet

Swift属性观察器willSet和didSet

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/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注