美文网首页RxSwift学习
RxSwift监听自定义类中的属性

RxSwift监听自定义类中的属性

作者: 悟饭哪 | 来源:发表于2021-05-15 11:45 被阅读0次

定义属性

@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后可加"!"
  • 关键字@objcdynamic缺一不可

监听方式

// 监听isShow的值
self.rx
    .observeWeakly(Bool.self, "isShow")
    .subscribe{ value in
          if_print(value ?? false)
     }
    .disposed(by: rx_disposeBag)
// 监听tabButton的tag的值
self.rx
    .observeWeakly(Int.self, "tabButton.tag")
    .subscribe{ tag in
        if_print(tag ?? 0)
    }
    .disposed(by: rx_disposeBag)
注意:
  • 在实例中,必须使用 rx.observeWeakly 进行监听,否则会产生循环应用。
  • 可以监听属性对象的属性,比如tabButton.tag
  • rx_disposeBag使用的是NSObject+Rx库中的值

rx.observe与rx.observeWeakly

RxSwift 提供了 rx.observe 和 rx.observeWeakly 两种方式观察序列。

rx.observe

rx.observe 是对 KVO 的简单封装,执行效率更高。它要求被观察的属性路径都是使用 strong 修饰的,如果观察使用 weak 修饰的属性,可会发生崩溃。
使用 rx.observe 时,需要注意 循环引用 的问题。如果一个类观察自己的属性,使用 rx.observe 将会产生 循环引用 的问题。

rx.observeWeakly

rx.observeWeakly 可以处理属性变为空的情况,所有可以用在使用 weak 修饰的属性上。
所有可以使用 rx.observe 的地方,都是使用 rx.observeWeakly。但是,rx.observeWeakly 的性能没有 rx.observe 的高。

Have fun.

相关文章

网友评论

    本文标题:RxSwift监听自定义类中的属性

    本文链接:https://www.haomeiwen.com/subject/lemhjltx.html