[英]RxSwift: Combining different types of observables and mapping result
我對 RxSwift 很陌生,並堅持創建一個序列。
我有 3 個 observables(isChanged、updatedValue、savedValue)。 如果表單值 isChanged 我想使用 updatedValue 否則savedValue。 我嘗試使用 .combineLatest 作為
Observable.combineLatest( isChanged, updatedValue, savedValue,
resultSelector: {isChanged, updatedValue, savedValue in
print ("\(isChanged), \(updatedValue), \(savedValue)")
}.observeOn(MainSchedular.instance)
.subscribe()
.disposed(by: bag)
我只想在 isChanged 標志更改時使用 updatedValue 否則總是使用savedValue。
我也嘗試使用 flatMapLatest 但我也在語法上掙扎。 任何幫助將不勝感激。 TIA
您的評論描述的用例與問題描述的用例不同......
每次擊鍵都會更改更新值,僅當點擊更新按鈕時調用 isChanged,而 saveValue 是原始值。
以上暗示你想要類似的東西:
func example<Value>(savedValue: Value, isChanged: Observable<Void>, updatedValue: Observable<Value>) -> Observable<Value> {
isChanged
.withLatestFrom(updatedValue)
.startWith(savedValue)
}
上面將發出savedValue
,然后在每次isChanged
發出時發出updatedValue
最后發出的任何isChanged
。 我建議您將isChanged
的名稱更改為其他名稱,因為它不是 Bool。
同時,這個問題暗示你想要更像:
func exampleʹ<Value>(savedValue: Value, isChanged: Observable<Bool>, updatedValue: Observable<Value>) -> Observable<Value> {
isChanged
.withLatestFrom(updatedValue) { $0 ? savedValue : $1 }
}
每次isChanged
發出一個值時,上面的代碼也會發出一個值。 它會發出savedValue
時候isChanged
發出虛假和updatedValue
每當isChanged
發出如此。
如果savedValue
是一個Observable(可能來自網絡請求或數據庫獲取),那么代碼看起來更像這樣:
func example<Value>(isChanged: Observable<Void>, savedValue: Observable<Value>, updatedValue: Observable<Value>) -> Observable<Value> {
savedValue
.concat(
isChanged.withLatestFrom(updatedValue)
)
}
func exampleʹ<Value>(isChanged: Observable<Bool>, savedValue: Observable<Value>, updatedValue: Observable<Value>) -> Observable<Value> {
isChanged
.withLatestFrom(Observable.combineLatest(savedValue, updatedValue)) { $0 ? $1.0 : $1.1 }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.