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

问题描述 投票:0回答:4

我有 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)
ios swift rx-swift reactive combine
4个回答
10
投票

你几乎已经拥有它了。将

source1
source2
组合起来怎么样?

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

1
投票

你可以使用这样的东西:

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

希望这有帮助:)


0
投票

你可以做这样的事情

        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
运算符来确保所有可观察量至少发出一次值。


0
投票

我是这样用的:

source.distinctUntilChanged() .withLatestFrom(Observable.combineLatest(source1, source2)) { ($0, $1.0, $1.1) } .subscribe(onNext: { (A, B, C) 中 print("OnNext 被调用") }) .处置(通过:袋子)

© www.soinside.com 2019 - 2024. All rights reserved.