美文网首页
RxSwift笔记(1) - 核心逻辑

RxSwift笔记(1) - 核心逻辑

作者: 左腿丶 | 来源:发表于2021-01-08 11:11 被阅读0次

    示例:

    1.先看创建序列:

    2.进到码源看其内部实现,返回一个AnonymousObservable(内部匿名序列),该类继承于Producer->Observable,Observable遵循ObservableType协议->ObservableConvertibleType

    3.AnonymousObservable初始化方法的参数为传递进来的闭包,AnonymousObservable保存了这个闭包,为了方便这里我们成为闭包A

    4.我们再看订阅

    5.AnonymousObservable并没有实现该方法,我们去它的父类里找,最终在ObservableType+Extensions找到了

    在该方法内部创建了一个AnonymousObserver(内部匿名观察者) -> ObserverBase,遵循Disposable, ObserverType协议,并持有了传递进来的闭包,这里成为闭包B

    我们再看

    self.asObservable().subscribe(observer)->self.subscribe(observer)->AnonymousObservable.subscribe(observer)

    AnonymousObservable内部没有实现这个方法,而是在它的父类Producer中找到了

    6.SinkDisposer先不用管它,这个是拿来做销毁的,我们直接看self.run方法就行,在它的子类,也就是AnonymousObservable类中实现了run方法

    在run方法中创建了AnonymousObservableSink,遵循ObserverType协议 ->Sink ,遵循Disposable协议,持有了AnonymousObserver

    7.再看sink.run方法 参数为AnonymousObservable ,self为AnonymousObservableSink

    我们先看AnyObserver(self),AnyObserver保存了AnonymousObservableSink.on

    8.parent._subscribeHandler(AnyObserver(self))  parent为AnonymousObservable ,_subscribeHandler为AnonymousObservable保存的闭包A, 所以会去闭包A中调用

    observer就是AnyObserver, 

    event为.next("发送响应"),self.observer为刚才保存的AnonymousObservableSink.on

    9.这里我们看self.forwardOn(event),AnonymousObservableSink本身没有实现forwardOn()方法,而是父类Sink中实现了

    10.self._observer AnonymousObservableSink持有的AnonymousObserver,它的父类ObserverBase实现了on方法

    11.AnonymousObserver实现了onCore方法

    12.self._eventHandler为闭包B,此时会去闭包B中

    自此 整个流程基本上算是走完。

    总结:create创建了匿名序列AnonymousObservable并持有了闭包A,subscribe创建了匿名观察者AnonymousObserver并持有了闭包B

    Producer.subscribe->AnonymousObservable.run->AnonymousObservableSink.run->闭包A->AnyObserver.on->AnonymousObservableSink.on->Sink.forwardOn->ObserverBase.on->AnonymousObserver.onCore->闭包B

    相关文章

      网友评论

          本文标题:RxSwift笔记(1) - 核心逻辑

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