2008Swift 2.0学习笔记(Day 33)——属性观察者
发布时间:2020-12-14 01:39:49 所属栏目:百科 来源:网络整理
导读:原创文章,欢迎转载。转载请注明:关东升的博客 为了监听属性的变化, Swift 提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。 属性观察者主要有以下两个: willSet :观察者在修改之前调用。 didSet :观察者
原创文章,欢迎转载。转载请注明:关东升的博客
为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。 属性观察者主要有以下两个:
属性观察者的语法格式如下:
面向对象类型 类型名 { ... 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
欢迎关注关东升新浪微博@tony_关东升。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |