RxSwift笔记(2) - 特征序列(上)

2021-01-08  本文已影响0人  左腿丶

特征序列

我们都知道 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事件

上一篇下一篇

猜你喜欢

热点阅读