RxSwift笔记(1) - 核心逻辑

示例:


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) - 核心逻辑)