以上面为例,
第一步:创建序列,Observable继承自ObservableType,Observable没有create方法,所以去ObservableType里面查看
这里不能看到create的具体实现,可以去create.html文件里面查看
从上面可以看到create返回的是一个继承自Producer的匿名观察者AnonymousObservable对象,并且在初始化时将subscribe保存了一份到self._subscribeHandler,到这里创建序列基本就完成。
第二步:订阅信号
现在创建了序列,也订阅了信号,那在什么地方发送信号呢?
第三步:发送信号
我们上下找会发现在订阅信号的return方法里面有一句代码
所以self.asObservable()也就是前面的self(注意Observable是Producer的父类),然后相当于执行AnonymousObservable().subscribe(observer),此时observer是AnonymousObserver<Any>对象,里面保存有各种枚举对应的event闭包回调.
我们去AnonymousObservable定义里面发现没有找到subscribe方法,然后去父类Producer里面查找
这里有一个run方法,继续找,子类AnonymousObservable有实现这个方法,所以直接去子类
继续找AnonymousObservableSink的run方法
此时的parent即上面传过来的self,也就是最开始的AnonymousObservable对象ob,而第一步创建序列时我们将
保存在self._subscribeHandler,此时parent._subscribeHandler(AnyObserver(self))就是发送信号。
而我们前面提到了observer里面保存有各种枚举对应的event闭包回调,所以这里发送不同的信号,会根据不同的枚举值响应不同的事件。
我理解的流程大致就是这些,有什么问题,忘各位大佬多多指教!