ios - RxSwift。结合最新。不是所有的可观察物都发出

标签 ios swift rx-swift rx-cocoa

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/

相关文章:

ios - swift ios 将数据分配给多个警报文本字段

swift - RxSwift MVVM 如何使用项目管理器设置 View 模型?

swift - 如何通过物化处理永无止境的链上的错误?

swift - rxswift : how to get the Observable<Any> resulting in a combination of Observable<[Category]>?

ios - NSManagedObjectID 的线程安全

ios - 初始化 Root View Controller 导致崩溃

ios - 从CoreData中删除实体数据

ios - 将 NSString 转换为 NSUTF32StringEncoding

ios - Swift 3 中的 PBEWithMD5AndDES 加密

ios - UIStatusBar 过渡动画——仅更改 Alpha