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

原创文章,欢迎转载。转载请注明:关东升的博客  php

为了监听属性的变化,Swift提供了属性观察者。属性观察者可以监听存储属性的变化,即使变化先后的值相同,它们也能监听到。java

属性观察者主要有如下两个:微信

  • willSet:观察者在修改以前调用。网站

  • didSet:观察者在修改以后马上调用。spa

属性观察者的语法格式以下:.net

面向对象类型 类型名 {    
    ...
    var 存储属性: 属性数据类型 = 初始化值 {
    willSet(新值) {            //定义willSet观察者。“新值”是传递给willSet观察者的参数,它保存了将要替换原来属性的新值
        ...
    }                     
    didSet(旧值) {     //定义didSet观察者。“旧值”是传递给didSet观察者的参数,它保存了被新属性替换的旧值。
        ...
    }                 
    }                 
}

属性观察者的语法格式比计算属性要混乱。设计

属性观察者能够在类和结构体中使用,不能在枚举中使用。code

示例代码以下:orm

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_ 关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

相关文章
相关标签/搜索