ios RxSwift与LatestFrom运算符一起使用,具有多个源

7xzttuei  于 2022-12-01  发布在  iOS
关注(0)|答案(3)|浏览(124)

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

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

jaql4c8m1#

你几乎就能做到了。把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)
2skhul33

2skhul332#

您可以使用类似于以下内容的内容:

valuesSource
        .withUnretained(self) { ($0, $1.0, $1.1, $1.2, $1.3) }
        .withLatestFrom(transactionSource) { ($0, $1) }
        .withLatestFrom(userSource) { ($0.0, $0.1, $1) }
        .map { values, transaction, user -> [SectionType] in

希望这对你有帮助:)

66bbxpm5

66bbxpm53#

你可以这样做

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看起来像x1c 0d1x
捕获:

我使用combineLatest,这意味着只有在所有的可观测值至少发射一次之后,这才能起作用。你总是可以使用startWith操作符来确保所有的可观测值至少发射一次。

相关问题