簡體   English   中英

RxSwift 使用帶有多個源的 withLatestFrom 運算符

[英]RxSwift Use withLatestFrom operator with multiple sources

我有 3 個 observables,即 source、source1 和 source2。 我想要的是每當源發出不同的事件時獲取源1和源2的值。 這是我想出的代碼,顯然它不會編譯,因為 withLatestFrom 只需要一個 observable。

source.distinctUntilChanged()
        .withLatestFrom(source1, source2) { ($0, $1.0, $1.1) }
        .subscribe(onNext: { (A, B, C) in
            print("OnNext called")
        })
        .disposed(by: bag)

你幾乎擁有它。 僅僅結合source1source2怎么樣?

source.distinctUntilChanged()
    .withLatestFrom(Observable.combineLatest(source1, source2)) { ($0, $1.0, $1.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這意味着只有在所有 observables 至少發出一次值之后才會起作用。 您始終可以使用startWith運算符來確保所有可觀察對象至少發出一次值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM