![](/img/trans.png)
[英]Swift Combine operator with same functionality like `withLatestFrom` in the RxSwift Framework
[英]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)
你幾乎擁有它。 僅僅結合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)
你可以做這樣的事情
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
這意味着只有在所有 observables 至少發出一次值之后才會起作用。 您始終可以使用startWith
運算符來確保所有可觀察對象至少發出一次值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.