RxSwift.CombineLatest.并非所有可观测量都被发射出去

Igo*_*uan 2 ios swift rx-swift rx-cocoa

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

}
)
Run Code Online (Sandbox Code Playgroud)

tom*_*ahh 17

combineLatest使用一个闭包,它接收尽可能多的参数,因为它结合了observables.所以它有意义等待它所结合的所有可观察对象在它调用它的闭包之前提供一个值.

但是,如果您可以为提供的每个可观察对象找到sain默认值combineLatest,则可以使用startWith(_:)它们强制它们具有初始值.

这是代码看起来像使用nilitem和空字符串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)
Run Code Online (Sandbox Code Playgroud)