《从零开始学Swift》学习笔记(Day 33)——属性观察者

本文介绍了Swift中的属性观察者概念及其使用方式。属性观察者包括willSet和didSet两种,分别用于在属性值更改前后执行特定操作。文章通过具体示例展示了如何在类和结构体中实现这些观察者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。
属性观察者主要有以下两个:
 willSet:观察者在修改之前调用。
 didSet:观察者在修改之后立刻调用。
属性观察者的语法格式如下:
面向对象类型 类型名 {
    ...
    var 存储属性: 属性数据类型 = 初始化值 {
    willSet(新值) { //定义willSet观察者。“新值”是传递给willSet观察者的参数,它保存了将要替换原来属性的新值
        ...
    }
    didSet(旧值) { //定义didSet观察者。“旧值”是传递给didSet观察者的参数,它保存了被新属性替换的旧值。
        ...
    }
    }
}
属性观察者的语法格式比计算属性要混乱。
属性观察者可以在类和结构体中使用,不能在枚举中使用。
示例代码如下:
class Employee {
    var no: Int = 0
    var name: String = "Tony" {
    willSet(newNameValue) { //定义name属性的willSet观察者,newNameValue是由我们分配的传递新值的参数名
        print("员工name新值:\(newNameValue)")
    }
    didSet(oldNameValue) { //定义name属性的didSet观察者,oldNameValue是由我们分配的传递旧值的参数名
        print("员工name旧值:\(oldNameValue)")
    }
    }
    var job: String?
    var salary: Double = 0
    var dept: Department?
}
struct Department {
    var no: Int = 10 {
    willSet { //定义no属性的willSet观察者,注意这里没有声明参数,但是我们可以在观察者内部使用newValue
        print("部门编号新值:\(newValue)")
    }
    didSet { //定义no属性的didSet观察者,注意这里也没有声明参数,但是我们可以在观察者内部使用oldValue
        print("部门编号旧值:\(oldValue)") ⑫
    }
    }
    var name: String = "RESEARCH"
}
var emp = Employee()
emp.no = 100
emp.name = "Smith" ⑬
var dept = Department()
dept.no = 30 ⑭
上述代码运行结果如下:
员工name新值:Smith
员工name旧值:Tony
部门编号新值:30
部门编号旧值:10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值