我有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)
你可以这样做
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
运算符来确保所有可观察对象至少发出一次值。