KVOController

KVOController

有關 Observe 的相關做法,在 Swift 上我會選擇使用 RxSwift,那 Objective-C 呢?

在這邊簡單介紹一下 KVOController 的 solution 給 Objective-C 的開發者。

在 NSObject 的子類別下,都會繼承到一個 FBKVOController 的物件,名字為 KVOController;

而這邊要使用的 method 是這個:

  • object 是我們要觀察的物件
  • keyPath 是 object 底下的要觀察的值,它的名稱(key)
  • options 則是填入 NSKeyValueObservingOptions
  • block 再來決定當 object 的 keyPath 那物件有更動時,要做些什麼事

舉個例子

  • observe:self
  • keyPath:NSStringFromSelector(@selector(observeObjectName))

翻成白話文就是 self 去觀察 self.observeObjectName 的 value 變化。

  • block 裡頭的 observer = 觀察的物件,object 則是被觀察的物件

在這個例子之中,observer 剛好和 object 是同一個物件(self),

而我們可以在 //do something 裡頭寫些東西,像是當 observeObjectName 有值更動時,畫面上 UILabel 的 text 會跟著改變之類的。

不過這邊要注意兩點

  1. KVOController 不像 RxCocoa 一樣,有提供 observe UIKit 物件的功能。
  2. readonly 的物件,因為 observe 為監聽 set 的動作,若是直接使用 _observeObjectName = @""; 的方式,則不會被監聽到。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s