我有以下可觀察的:
observable1
.withLatestFrom(observable2) { (obs1Value, obj2Value) -> [SomeDataType] in
return obj1Value.someFunction(for: obj2Value)
}
.bind(to: someSubject)
.disposed(by: disposeBag)
當以下 PublishRelay 觸發時,它應該被更新:
let publishRelay = PublishRelay<AnotherDataType>()
observable1 和 observable2 有 2 種不同的型別
我嘗試了以下方法:
Observable.combineLatest(observable1, observable2, publishRelay.asObservable())
.map { obs1Value, obj2Value, _ in
return obj1Value.someFunction(for: obj2Value)
}
.bind(to: someSubject)
.disposed(by: disposeBag)
但是遇到了 observable1 和 observable2 直到 publishRelay 觸發才被系結的問題(它基本上等待所有 3 個值到達)
即使沒有 PublishRelay,我也需要通過 observables,但是在 PublishRelay 觸發時獲得額外的更新(我沒有在 observables 訂閱中使用來自 PublishRelay 的任何資料)
實作上述目標的最佳方法是什么?謝謝!
uj5u.com熱心網友回復:
這里的關鍵是startWith為了“預先觸發”有問題的可觀察物件,以便它具有最新的作業價值。由于您不關心繼電器的值,因此您可以映射到 unit 和 startWith 單位。
它看起來像這樣:
Observable.combineLatest(observable1, publishRelay.asObservable().map { _ in () }.startWith(()))
.withLatestFrom(observable2) { $0.0.someFunction(for: $1) }
.bind(to: someSubject)
.disposed(by: disposeBag)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521061.html
