《从零开始学Swift》学习笔记(Day 33)——属性观察者
原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:關(guān)東升的博客?
為了監(jiān)聽(tīng)屬性的變化,Swift提供了屬性觀察者。屬性觀察者能夠監(jiān)聽(tīng)存儲(chǔ)屬性的變化,即便變化前后的值相同,它們也能監(jiān)聽(tīng)到。
屬性觀察者主要有以下兩個(gè):
l willSet:觀察者在修改之前調(diào)用。
l didSet:觀察者在修改之后立刻調(diào)用。
屬性觀察者的語(yǔ)法格式如下:
面向?qū)ο箢愋?類型名 { ...var 存儲(chǔ)屬性: 屬性數(shù)據(jù)類型 = 初始化值 {willSet(新值) { //定義willSet觀察者。“新值”是傳遞給willSet觀察者的參數(shù),它保存了將要替換原來(lái)屬性的新值 ...} didSet(舊值) { //定義didSet觀察者。“舊值”是傳遞給didSet觀察者的參數(shù),它保存了被新屬性替換的舊值。 ...} } }屬性觀察者的語(yǔ)法格式比計(jì)算屬性要混亂。
屬性觀察者可以在類和結(jié)構(gòu)體中使用,不能在枚舉中使用。
示例代碼如下:
class Employee {var no: Int = 0var name: String = "Tony" { willSet(newNameValue) { //定義name屬性的willSet觀察者,newNameValue是由我們分配的傳遞新值的參數(shù)名 print("員工name新值:\(newNameValue)") }didSet(oldNameValue) { //定義name屬性的didSet觀察者,oldNameValue是由我們分配的傳遞舊值的參數(shù)名 print("員工name舊值:\(oldNameValue)")}}var job: String?var salary: Double = 0var dept: Department?} struct Department { var no: Int = 10 { willSet { //定義no屬性的willSet觀察者,注意這里沒(méi)有聲明參數(shù),但是我們可以在觀察者內(nèi)部使用newValue print("部門編號(hào)新值:\(newValue)")}didSet { //定義no屬性的didSet觀察者,注意這里也沒(méi)有聲明參數(shù),但是我們可以在觀察者內(nèi)部使用oldValue print("部門編號(hào)舊值:\(oldValue)") ?}}var name: String = "RESEARCH"} var emp = Employee()emp.no = 100emp.name = "Smith" ? var dept = Department()dept.no = 30 ?上述代碼運(yùn)行結(jié)果如下:
員工name新值:Smith
員工name舊值:Tony
部門編號(hào)新值:30
部門編號(hào)舊值:10?
?
歡迎關(guān)注關(guān)東升新浪微博@tony_關(guān)東升。
關(guān)注智捷課堂微信公共平臺(tái),了解最新技術(shù)文章、圖書(shū)、教程信息
? ? ? ? ? ? ? ? ? ? ? ? ? ?
更多精品iOS、Cocos、移動(dòng)設(shè)計(jì)課程請(qǐng)關(guān)注智捷課堂官方網(wǎng)站:http://www.zhijieketang.com
智捷課堂論壇網(wǎng)站:http://51work6.com/forum.php
?
轉(zhuǎn)載于:https://www.cnblogs.com/iOS-Blog/p/4949238.html
總結(jié)
以上是生活随笔為你收集整理的《从零开始学Swift》学习笔记(Day 33)——属性观察者的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle索引
- 下一篇: 手机自动化测试:appium源码分析之b