RXSwift之Observable序列原理(2)

以上面为例,

第一步:创建序列,Observable继承自ObservableType,Observable没有create方法,所以去ObservableType里面查看

RXSwift之Observable序列原理(2)

RXSwift之Observable序列原理(2)

这里不能看到create的具体实现,可以去create.html文件里面查看

RXSwift之Observable序列原理(2)

RXSwift之Observable序列原理(2)

从上面可以看到create返回的是一个继承自Producer的匿名观察者AnonymousObservable对象,并且在初始化时将subscribe保存了一份到self._subscribeHandler,到这里创建序列基本就完成。

第二步:订阅信号

RXSwift之Observable序列原理(2)

RXSwift之Observable序列原理(2)

现在创建了序列,也订阅了信号,那在什么地方发送信号呢?

第三步:发送信号

我们上下找会发现在订阅信号的return方法里面有一句代码

RXSwift之Observable序列原理(2)
    首先看看self.asObservable()是什么,首先我们知道self是create生成的AnonymousObservable对象,即ob对象

RXSwift之Observable序列原理(2)

所以self.asObservable()也就是前面的self(注意Observable是Producer的父类),然后相当于执行AnonymousObservable().subscribe(observer),此时observer是AnonymousObserver<Any>对象,里面保存有各种枚举对应的event闭包回调.

我们去AnonymousObservable定义里面发现没有找到subscribe方法,然后去父类Producer里面查找

RXSwift之Observable序列原理(2)

这里有一个run方法,继续找,子类AnonymousObservable有实现这个方法,所以直接去子类

RXSwift之Observable序列原理(2)

继续找AnonymousObservableSink的run方法

RXSwift之Observable序列原理(2)

此时的parent即上面传过来的self,也就是最开始的AnonymousObservable对象ob,而第一步创建序列时我们将

RXSwift之Observable序列原理(2)

保存在self._subscribeHandler,此时parent._subscribeHandler(AnyObserver(self))就是发送信号。

而我们前面提到了observer里面保存有各种枚举对应的event闭包回调,所以这里发送不同的信号,会根据不同的枚举值响应不同的事件。

我理解的流程大致就是这些,有什么问题,忘各位大佬多多指教!

 

 

 

 

相关文章: