Swift4 - KVO的淺析

SWIFT4.0中的KVO

在swift4.0 中 KVO 出現(xiàn)了變更,添加了監(jiān)聽回調(diào).變得更加簡單易用.同時(shí)會自動釋放.不用再remove了.但是相對于OC中使用來說還是有一些需要注意的地方.

1. 需要在當(dāng)前類中添加一個(gè)屬性來持有

NSKeyValueObservation 否則在函數(shù)執(zhí)行完畢后將會被釋放

2. 被監(jiān)聽的類需要用 @objcMembers 修飾,否則會報(bào)錯

3. 你需要監(jiān)聽哪個(gè)屬性,則該屬性需要 dynamic 修飾,否則不會觸發(fā)回調(diào)

舉個(gè)簡單的例子.一個(gè)用于被監(jiān)聽的模型

@objcMembers?class?UserModel :?NSObject?{

?dynamic?var name :?String =?""

?var age :?Int =?0

}

?注意: 1.該UserModel被?@objcMembers 修飾.

? ? ? 2.模型中的屬性 name 被?dynamic 修飾, 可被監(jiān)聽. 而 age 則無法被監(jiān)聽,如果想要監(jiān)聽 age 則同樣需要用?dynamic 進(jìn)行修飾



KVO的使用

1.在一個(gè)類中(如ViewController)我們添加一個(gè)屬性?

var model : UserModel! = {

?var model = UserModel.init()

model.name =?"張三"?

     model.age = 20

?return model

? ? }()


2. 在類中再添加一個(gè)屬性?

var?ob : NSKeyValueObservation?

來持有 監(jiān)聽?NSKeyValueObservation

然后寫一個(gè)方法并且在合適的地方調(diào)用

func setupKVO() {

      // 注意這里用self.ob來持用該監(jiān)聽 model為需要監(jiān)聽的類實(shí)例.調(diào)用時(shí)需要確保其不為nil?

self.ob =?model!.observe(\UserModel.name) { (model, change)?in

print("model.name")

? ? ? ? }

? ? }


這樣.當(dāng) model.name 的值改變時(shí)就會觸發(fā)回調(diào)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容