RxSwift
RxSwift
1、回忆
-
前期准备:开店 就是block的保存,如约定仓库规则,交易规则,物流规则
-
下单 = 订阅,对于触发block。商家给衣服加一层袋子包装,就是创建信号的过程。等于值加上一层上下文。
-
物流 = map,等于各类操作。
比如快递员来取件,又给包裹加一层包裹,就是快递盒子,此时衣服有两层上下文,而flatMap的操作可以降维。
-
如果快递员打开你的包裹,里面是衣服,他偷偷拿了一件出来,然后纸箱原样封好,发往下一个目的,这样就是map。
-
这是快递经过各个物流点,如果你很不幸运的话,又被map了;也可以是流水线分拨,这就可能涉及和其他信号的各种操作
-
最后到派发快递员手上了,收到这个快递后,他知道马上又会收到你的另外一个快递,他选择等到另外一个快递一起送给你,这个就是zip;如果是按照收到顺序分开送,那就是merge
-
总结:信号的上下文包装如图快递纸箱一样,我不必关心内部是什么,能按统一流程送到你手上
2、概念
参考文章:
2、Swift - RxSwift的使用详解3(Observable介绍、创建可观察序列)
- 4.1 Observable - 可被监听的序列
-
4.2 Observer - 观察者
-
4.3 Observable & Observer 既是可被监听的序列也是观察者
-
4.4 Operator - 操作符
-
4.5 Disposable - 可被清除的资源
-
4.6 Schedulers - 调度器
四大核心组件VS
ReactiveCocoa | RxSwift |
---|---|
1、信号源:RACStream | 1、可被监听的序列 - Observable |
2、订阅者:RACSubscriber | 2、观察者 - Observer |
3、调度者:RACScheduler | 3、调度器 - Schedulers |
4、清洁者:RACDisposable | 4、可被清除的资源 - Disposable - |
subject参考文章
3、设计规则:
参考文章:
4、如何选择操作符?
大部分和RAC的操作符一致
操作符文章:RxSwift学习之旅 - 序列的基本操作
可视化链接:http://rxmarbles.com/#combineLatest
map flatMap区别
参考文章:RxSwift 系列(九) -- 那些难以理解的概念
let disposeBag1 = DisposeBag()
let test = Observable.of("1", "2", "3", "4", "5")
.map { Observable.just($0) }
test.subscribe(onNext: {
print($0)
}).addDisposableTo(disposeBag1)
------------------------------------------------------------------
输出
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
let disposeBag = DisposeBag()
let test1 = Observable.of("1", "2", "3", "4", "5")
.flatMap { Observable.just($0) }
test1.subscribe(onNext: {
print($0)
}).addDisposableTo(disposeBag)
--------------------------------------------
输出
1
2
3
4
5
- map函数只能返回原来的那一个序列,里面的参数的返回值被当做原来序列中所对应的元素。
- flatMap函数返回的是一个新的序列,将原来元素进行了处理,返回这些处理后的元素组成的新序列
- map函数 + 合并函数 = flatMap函数
5、源码
参考文章:
2、【领略RxSwift源码】- 变换操作(Operators)
Producer<Element> : Observable<Element>
1、create返回AnonymousObservable实例,create_block被保存在AnonymousObservable实例的属性中
AnonymousObservable实例.subscribe,调用Producer.subscribe(Producer 是AnonymousObservable的父类),将观察者和sink垃圾者传进去调用AnonymousObservable实例.run
2、AnonymousObservable.run方法:利用传进去的参数(观察者和垃圾者)创建AnonymousObservableSink,把自己传进去调用sink.run,AnonymousObservableSink.run 触发self.create_block,参数是将AnonymousObservableSink转换成AnyObserver观察者(AnonymousObservableSink的on → AnyObserver的on ),返回的是一个disposable
6、项目推荐
1、TSWeChat:https://github.com/hilen/TSWeChat