swift4.0中的KVO


在swift4.0 中 KVO 出現了變更,添加了監聽回調.變得更加簡單易用.同時會自動釋放.不用再remove了.但是相對於OC中使用來說還是有一些需要注意的地方.
1. 需要在當前類中添加一個屬性來持有
NSKeyValueObservation 否則在函數執行完畢后將會被釋放
2. 被監聽的類需要用 @objcMembers 修飾,否則會報錯
3. 你需要監聽哪個屬性,則該屬性需要 dynamic 修飾,否則不會觸發回調

舉個簡單的例子.一個用於被監聽的模型

@objcMembers class UserModel : NSObject {

    dynamic var name : String = ""

    var age : Int = 0

}

 

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

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

 

 

KVO的使用

 

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

    var model : UserModel! = {

        var model = UserModel.init()

        model.name = "張三" 

     model.age = 20

        return model

    }()

 

2. 在類中再添加一個屬性 

 

var ob : NSKeyValueObservation?

 

來持有 監聽 NSKeyValueObservation

 

然后寫一個方法並且在合適的地方調用

 

   func setupKVO() {

      // 注意這里用self.ob來持用該監聽 model為需要監聽的類實例.調用時需要確保其不為nil 

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

        print("model.name")

        }

    }

 

這樣.當 model.name 的值改變時就會觸發回調


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM