本文没有记录RxSwift操作符的基本介绍和用法,具体介绍在网上有很多,当然最好就是查看官方Demo了,还有一个不错的中文文档(非官方)。本文主要是记录操作符的对比,本人的能力有限,如有错漏,劳烦大家指出,希望能在操作符的对比中,深入熟悉RxSwift。
map & flatMap 异同
相同:
- 都是对
Observable
的每个元素应用一个转换方法,然后返回一个Observable
不同:
-
map
中的返回值直接是Observable
的元素,并不会合并 -
flatMap
有将多个Observable
合并在一起的能力
flatMap = map + merge
flatMap & flatMapLatest 异同
相同:
- 都是对
Observable
的每个元素应用一个转换方法转换成其他Observable
不同:
-
flatMap
会将这些Observables
合并在一起 -
flatMapLatest
只会取最新的Observable
concat与starWith异同
相同:
- 都是在
Observable
上插入其他元素或者序列,都用于插入事件
不同:
-
concat
是在当前序列完成后添加新的Observable
-
startWith
是在当前序列的头部添加元素
concat与merge异同
相同:
- 都是将
Observables
整合在一起
不同:
-
concat
是将多个Observables
按顺序串联起来 -
merge
是将多个Observables
按照事件的发生顺序合并在一起
reduce、scan异同
相同:
- 都是持续将
Observable
的每一个元素应用一个函数(上一个结果和当前元素的运算,以此类推从初始值到最后)
不同:
-
reduce
是直到遍历完全部的元素后发出最终结果 -
scan
发出每一次函数返回的结果。
observeOn & subscribeOn
-
subscribeOn
操作符指定Observable
在哪个Scheduler
开始执行,无论它处于链的那个位置。 -
observeOn
将决定后面的方法在哪个Scheduler
运行。