RxSwift -- 集合操作

很多时候, 需要将两个事件队列合并来处理, 例如, 你想在用户确实输入了用户名和密码后, 才启用登录按钮

merge

合并两个队列例如如下两个队列
--a1--a2-a3----a4--->
---b1-------b3------>
合并之后会变成
--a1-b1-a2-a3-b3-a4-->

let observableA = PublishSubject()
let observableB = PublishSubject()
Observable.merge(observableA, observableB).subscribe { (event) in
    self.print(event)
    }.disposed(by: disposeBag)
observableA.onNext("a1")
observableB.onNext("b1")
observableA.onNext("a2")
observableA.onNext("a3")
observableB.onNext("b2")
observableA.onNext("a4")

zip

zip 会将两个事件合并为一个事件, 事件的总数与最小的队列一致, 并且, 要两个都发生变化才会发送事件, 而且只要两组事件序列各自内部顺序是一致的, 不管两个序列之间元素顺序的先后, 那么最后 zip 的结果也是一致的,

RxSwift -- 集合操作_第1张图片
zip

例如上图中, 上方队列只要顺序是1, 2, 3, 4, 5, 下方是 A, B, C, D 那么不管1 和 A 那个在前, 最终的输出都是1A 2B...
RxSwift -- 集合操作_第2张图片
zip

你可以去这个网站 http://reactivex.io/documentation/operators/zip.html 上去拖动一下那几个事件的顺序, 方便理解

combineLatest

相对于 zip 来说, combineLatest 方便理解许多, 只要双方都有至少一次事件就可以开始了, 每次取的都是每个序列最近发生的事件


RxSwift -- 集合操作_第3张图片
combineLatest

你可能感兴趣的:(RxSwift -- 集合操作)