RxSwift監(jiān)聽自定義類中的屬性

定義屬性

@objc dynamic private var isShow: Bool = false
@objc dynamic private var tabButton: UIButton!

注意:
  • 值類型Bool后面不要加"!",否則會報錯
    Property cannot be marked @objc because its type cannot be represented in Objective-C
  • 引用類型UIButton后可加"!"
  • 關(guān)鍵字@objcdynamic缺一不可

監(jiān)聽方式

// 監(jiān)聽isShow的值
self.rx
    .observeWeakly(Bool.self, "isShow")
    .subscribe{ value in
          if_print(value ?? false)
     }
    .disposed(by: rx_disposeBag)
// 監(jiān)聽tabButton的tag的值
self.rx
    .observeWeakly(Int.self, "tabButton.tag")
    .subscribe{ tag in
        if_print(tag ?? 0)
    }
    .disposed(by: rx_disposeBag)
注意:
  • 在實例中,必須使用 rx.observeWeakly 進行監(jiān)聽,否則會產(chǎn)生循環(huán)應(yīng)用。
  • 可以監(jiān)聽屬性對象的屬性,比如tabButton.tag
  • rx_disposeBag使用的是NSObject+Rx庫中的值

rx.observe與rx.observeWeakly

RxSwift 提供了 rx.observe 和 rx.observeWeakly 兩種方式觀察序列。

rx.observe

rx.observe 是對 KVO 的簡單封裝,執(zhí)行效率更高。它要求被觀察的屬性路徑都是使用 strong 修飾的,如果觀察使用 weak 修飾的屬性,可會發(fā)生崩潰。
使用 rx.observe 時,需要注意 循環(huán)引用 的問題。如果一個類觀察自己的屬性,使用 rx.observe 將會產(chǎn)生 循環(huán)引用 的問題。

rx.observeWeakly

rx.observeWeakly 可以處理屬性變?yōu)榭盏那闆r,所有可以用在使用 weak 修飾的屬性上。
所有可以使用 rx.observe 的地方,都是使用 rx.observeWeakly。但是,rx.observeWeakly 的性能沒有 rx.observe 的高。

Have fun.

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

相關(guān)閱讀更多精彩內(nèi)容

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