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事件

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

推荐阅读更多精彩内容