RxSwift 将 withLatestFrom 运算符与多个源一起使用

RxSwift Use withLatestFrom operator with multiple sources

我有 3 个 observable,即 source、source1 和 source2。我想要的是每当源发出不同的事件时获取 source1 和 source2 的值。这是我想出的代码,显然它不会编译,因为 withLatestFrom 只期望一个可观察的。

source.distinctUntilChanged()
        .withLatestFrom(source1, source2) { ([=10=], .0, .1) }
        .subscribe(onNext: { (A, B, C) in
            print("OnNext called")
        })
        .disposed(by: bag)

你可以这样做

        let source = PublishSubject<Int>()
        let source1 = PublishSubject<Int>()
        let source2 = PublishSubject<Int>()

        Observable
            .combineLatest([source,source1,source2])
            .distinctUntilChanged { (oldArray, newArray) -> Bool in
                return oldArray.first == newArray.first
            }
            .subscribe(onNext: { (values) in
                debugPrint("source1 value is \(values[1]) and source2 value is \(values[2])")
            })
            .disposed(by: self.disposeBag)

        source1.onNext(100)
        source2.onNext(200)
        source.onNext(3)

        source.onNext(4)
        source.onNext(4)

O/P 看起来像

捕获:

我正在使用 combineLatest 这意味着只有在所有可观察对象至少发出一次值后,这才会起作用。您始终可以使用 startWith 运算符来确保所有可观察对象至少发出一次值。

你快搞定了。将 source1source2 结合起来怎么样?

source.distinctUntilChanged()
    .withLatestFrom(Observable.combineLatest(source1, source2)) { ([=10=], .0, .1) }
    .subscribe(onNext: { (A, B, C) in
        print("OnNext called")
    })
    .disposed(by: bag)