美文网首页
RxSwift笔记(2) - 特征序列(上)

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

作者: 左腿丶 | 来源:发表于2021-01-08 17:22 被阅读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事件

    相关文章

      网友评论

          本文标题:RxSwift笔记(2) - 特征序列(上)

          本文链接:https://www.haomeiwen.com/subject/asuxaktx.html