簡體   English   中英

RxSwift。 CombineLatest。 並非所有可觀測量都被發射出去

[英]RxSwift. CombineLatest. Not all observables emitted

Observable.combineLatest(...){...}包含幾個可觀察對象,但是沒有發出一些這些可觀察對象。

只有在發出此方法中的所有可觀察對象時,combineLatest才會發出。

如何跳過不發出的observable並發出combineLatest?

let tap = firstButton.rx.tap.asObservable().map{ (_) -> Observable<Item> ...}

let textfieldObservable = viewTextField.rx.text.orEmpty.asObservable()

submitButton.rx.tap.withLatestFrom(Observable.combineLatest(textfieldObservable, tap ... )).flatMapLatest({
...
// this method will not be executed without tap on firstButton before tapping on submitButton

}
)

combineLatest使用一個閉包,它接收盡可能多的參數,因為它結合了observables。 所以它有意義等待它所結合的所有可觀察對象在它調用它的閉包之前提供一個值。

但是如果你能找到為combineLatest提供的每個observable的sain默認值,你可以使用startWith(_:)強制它們具有初始值。

這就是代碼看起來像使用nil作為item和空字符串的text

let tapObservable: Observable<Item> = // ...
let textField: Observable<String> = // ...

let combined = Observable.combineLatest(
  tapObservable.map { /* map everything to optional */ Optional.some($0) }.startWith(nil), 
  textField.startWith("")
) { item, text in
  // combine item and text
}

submitButton.rx.tap.withLatestFrom(combined)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM