原創文章,歡迎轉載。轉載請註明:關東昇的博客 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_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php