RxSwift笔记(2) - 特征序列(上)
特征序列
我们都知道 Swift 是一个强类型语言,而强类型语言相对于弱类型语言的一个优点是更加严谨。我们可以通过类型来判断出,实例有哪些特征。同样的在 RxSwift 里面 Observable 也存在一些特征序列,这些特征序列可以帮助我们更准确的描述序列。并且它们还可以给我们提供语法糖,让我们能够用更加优雅的方式书写代码,他们分别是:Single、Completable、Maybe、Driver、Signal、ControlEvent
一、Single
1.我们直接点进码源去看,发现Single本质上就是一个PrimitiveSequence,PrimitiveSequence遵循PrimitiveSequenceType,PrimitiveSequence本身没有create()方法
PrimitiveSequenceType的拓展中有一个create(),在create()方法中,创建一个Observable队列
PrimitiveSequence持有了Observable队列
2.PrimitiveSequence本身并没有subscribe(),但是PrimitiveSequenceType的拓展中实现了subscribe()方法
self.primitiveSequence = self,
asObservable()返回的是刚出持有的Observable
3.根据核心逻辑我们知道会调用Observable.create()中的闭包
然后去调用Single.create()中的闭包
后面一部分和核心逻辑中的一致,直到
4.后面会去调用闭包
小结:在核心逻辑中的流程是
Producer.subscribe->AnonymousObservable.run->AnonymousObservableSink.run->闭包A->AnyObserver.on->AnonymousObservableSink.on->Sink.forwardOn->ObserverBase.on->AnonymousObserver.onCore->闭包B
而在Single中会在闭包A后去调用Single中的闭包A,在闭包B后去调用Single中的闭包B
二、Completable本质上其实也是PrimitiveSequence
和Single的区别和Maybe放到一起去说。
三、Maybe本质上也是一个PrimitiveSequence
那么三者之间有什么区别呢
Single Completable Maybe三者之间Single只能发送元素和error事件,Completable只能发送error事件和completed事件,Maybe可以发送元素和error事件和completed事件,Observable不是就能发送元素和error事件,completed事件了吗,我们在回过头去看码源
发现在PrimitiveSequenceType拓展的subscribe()方法中用stopped这三种特征序列只能发送一个元素或者一个事件。
由此我们可以了解到Single只能发送一个元素或者一个error事件,Completable只能发送error事件或者completed事件,Maybe发送一个元素或者error事件或者completed事件