Observable.combineLatest(...){...} 包含多个可观察值,但其中一些未发出。
combineLatest 仅在发出此方法中的所有可观察值时发出。
如何跳过未发出的可观察对象并发出 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
使用一个闭包,该闭包接收与合并可观察对象一样多的参数。因此,在调用闭包之前,等待它组合的所有可观察对象提供一个值是有道理的。
但是,如果您可以为提供给 combineLatest
的每个 observable 找到一个默认值,您可以使用 startWith(_:)
来强制它们有一个初始值值(value)。
这就是使用 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)
关于ios - RxSwift。结合最新。不是所有的可观察物都发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40707094/