在这种情况下,应该使用哪个rxSwift操作符?

问题描述 投票:-1回答:1

这是我的方案。我有一个Subject和另一个Subject一起被用于 combineLatest。到目前为止一切正常。现在我在其中一个subjects上推送onCompleted,但是当另一个subjects推送一些事件时,CombineLatest仍然在工作。

我想要的是,只要其中一个主题完成了,我就希望combineLatest停止工作。CombineLatest是正确的操作符吗?还是有其他操作符可用?

swift reactive-programming rx-swift rx-cocoa combinelatest
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.