【问题标题】:RxSwift how to refresh BehaviourSubject better way?RxSwift 如何更好地刷新 BehaviourSubject 方法?
【发布时间】:2019-05-24 08:02:52
【问题描述】:

我有 BehaviourSubject,我想用最后一个发出的值刷新项目。下面的例子我可以做到,

 func refreshCurrent() {
    do {
        let items = try currentMatchList.value()
        if !(items.first?.items ?? []).isEmpty {
            refreshItems(sportId: try currentSport.value())
        }
    } catch {
        LOG.error(error.localizedDescription)
        return
    }
}

但我想知道是否有任何内置的 RxSwift 功能可以用于相同的任务?

我发现曾经有一个 Variable() 类型,但现在它已经消失了,建议使用 BehaviourSubject 似乎。

提前致谢。

【问题讨论】:

    标签: swift system.reactive rx-swift behaviorsubject


    【解决方案1】:

    在官方 github 存储库中搜索所有问题后,我发现关于同一问题的长时间讨论 here 并且已关闭。

    但是好消息是,freak4pc 声明我们可以使用 RxCocoa 类 BehaviourRelay,它有一个直接的值访问方法

    example("BehaviorRelay") {
        let disposeBag = DisposeBag()
        let subject = BehaviorRelay<String>(value: "?")
    
        print(subject.value)
    
        subject.addObserver("1").disposed(by: disposeBag)
        subject.accept("?")
        subject.accept("?")
    
        print(subject.value)
    
    }
    

    【讨论】:

      【解决方案2】:

      不知道我的理解是否正确,但您似乎想将您的值存储在 BehaviourSubject 中。

      let foo = BehaviourSubject<[Something]>(value: [])
      print(foo.value) //Empty Array
      foo.accept([Something(), Something()])
      print(foo.value) //Array of two somethings
      

      【讨论】:

      • 是的,但问题是 BehaviourSubject 会抛出有时难以处理的值。这里官方文档/// Gets the current value or throws an error. /// /// - returns: Latest value. public func value() throws -&gt; Element {
      • 但是您使用的 BehaviourSubject 会产生价值,您可以在这里查看 RxSwift 的最新文档github.com/ReactiveX/RxSwift/blob/master/Rx.playground/Pages/…
      • 对不起。使用 BehaviourRelay!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      相关资源
      最近更新 更多