提问者:小点点

RxSwift在多个源中使用with LatestFrom运算符


我有3个可观察的对象,即源,源1和源2。 我想要的是,每当source发出distinct event时,获取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)

共1个答案

匿名用户

你可以这样做

        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)

捕捉:

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