如何读取 RxSwift 属性的值? <驱动程序>布尔

Posted

技术标签:

【中文标题】如何读取 RxSwift 属性的值? <驱动程序>布尔【英文标题】:How can I read the value of an RxSwift property? <Driver>Bool 【发布时间】:2021-10-12 15:05:23 【问题描述】:

我想读取一个属性的值

var checkInEnabled: Driver<Bool>  get 

我只需要在类加载后运行一次代码,所以我不想使用类似的东西:

roomStatus.checkInEnabled
      .drive  [weak self] enabled in
        if !enabled 
          // do something everytime it changes
        
      .disposed(by: disposeBag)

而是像这样:

if roomStatus.checkInEnabled 
//only do something now

感谢阅读,

【问题讨论】:

据我了解,Driver 是一个序列。如果该序列没有发出任何内容,则它没有要读取的值。听起来您正在尝试做一些与 Reactive 模型作斗争的事情。无论您尝试使用 if 检查完成什么,都应该响应 Driver 发出的值。 @ScottThompson 是正确的。 Driver 不存储状态,它发出值。您的驱动程序中没有要查询的 Bool。 如果你能更好地解释你想要做什么,它可能会有所帮助。 checkInEnabled 是否与您要运行代码的类在同一类中? 【参考方案1】:

使用 take(1) 运算符

roomStatus.checkInEnabled
      .take(1)
      .drive  [weak self] enabled in
        if !enabled 
           // ~~~
        
      .disposed(by: disposeBag)

【讨论】:

以上是关于如何读取 RxSwift 属性的值? <驱动程序>布尔的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有 RxSwift 的驱动程序上使用 flatMapLatest

如何从 RxSwift 中的 onNext 获得正确的值?

RxSwift:将 RX 绑定添加到 UITextField 时出错:“Binder<String?>”类型的值没有成员“debounce”

如何使用 RxSwift 观察 Bool 属性?

如何在 RxSwift 中观察对象的属性?

C#如何读取xml文件里面节点里面的属性信息?