示例:
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
网友评论