定義屬性
@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)鍵字
@objc和dynamic缺一不可
監(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.