RxSwift -- 集合操作

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

merge

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

let observableA = PublishSubject<String>()
let observableB = PublishSubject<String>()
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 的结果也是一致的,

zip

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

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

combineLatest

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


combineLatest
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 按照用途分类出以下统计函数: AVEDEV 用途:返回一组数据与其平均值的绝对偏差的平均值,该函数可以评测数据(例...
    四方院祭司阅读 2,949评论 0 3
  • 完美洗牌算法 题目描述: 有个长度为2n的数组 {a1, a2, a3, ..., an, b1, b2, b3,...
    MinoyJet阅读 3,935评论 0 2
  • 前面的内容中已经学习了如何创建, 过滤, 变换 observable 的事件序列, 尤其是需要留意 flatMap...
    貘鸣阅读 1,812评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 最近在学习RxSwift相关的内容,在这里记录一些基本的知识点,以便今后查阅。 Observable 在RxSwi...
    L_Zephyr阅读 1,784评论 1 4