在这种情况下使用哪个 rxSwift 运算符?

Posted

技术标签:

【中文标题】在这种情况下使用哪个 rxSwift 运算符?【英文标题】:Which rxSwift operator to use in this scenario? 【发布时间】:2020-04-29 15:08:07 【问题描述】:

这是我的场景。我有一个 Subject 与 combineLatest 中的另一个 Subject 一起使用。到现在为止还挺好。现在我在其中一个主题上推送 onCompleted,但是当另一个主题推送某个事件时,CombineLatest 仍在工作。

我想要的是,一旦任一科目完成,我希望 combineLatest 停止工作。 CombineLatest 是否适合在这里使用?或者还有其他运营商吗?

【问题讨论】:

你能提供一些代码给我们看看吗? 【参考方案1】:

你应该使用 takeUntil 操作符:

let subject1 = PublishSubject<Void>()
let subject2 = PublishSubject<Void>()
let subjectWasCompleted = Observable<Void>
    .merge(
        subject1.ignoreElements().andThen(.just(())),
        subject2.ignoreElements().andThen(.just(()))
    )

Observable.combineLatest(subject1, subject2)
    .takeUntil(subjectWasCompleted)
    .subscribe()
    .disposed(by: disposeBag)

【讨论】:

所以我用另一种方式解决了我的问题,但这正是我可以使用的那种运算符。谢谢。

以上是关于在这种情况下使用哪个 rxSwift 运算符?的主要内容,如果未能解决你的问题,请参考以下文章

在 RxSwift 中设置 TextField 字符的限制 [重复]

在 RxSwift 4.0.0 中正确使用 retryWhen 运算符

RxSwift:使用运算符组合下载照片并保存在本地

RxSwift 在 Zip 运算符中处理 observable

在这种情况下如何重载“+”运算符,

iOS RxSwift - 如何使用 Amb 运算符?