RxSwift如何刷新BehaviourSubject更好的方法?

时间:2019-05-24 08:02:53

标签: swift system.reactive rx-swift behaviorsubject

我有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的类型。

谢谢。

2 个答案:

答案 0 :(得分:2)

搜索了官方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)

}

答案 1 :(得分:0)

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

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