观察者是用来监听事件,然后它需要这个事件做出响应。例如:弹出提示框就是观察者,它对点击按钮这个事件做出响应。
创建观察者最直接的方法就是在 Observable 的 subscribe 方法后面描述,事件发生时,需要如何做出响应。而观察者就是由后面的 onNext,onError,onCompleted的这些闭包构建出来的。
一、AnyObserver
AnyObserver 可以用来描叙任意一种观察者。
在核心逻辑中就出现过AnyObserver
在Sink.run()中会创建一个AnyObserver
![](https://img.haomeiwen.com/i1813181/09a6f20529c42788.png)
即使在subscribe()中传递一个AnyObserver,还是会在AnonymousObservableSink.run()中创建一个AnyObserver,去作为闭包A中的参数。
![](https://img.haomeiwen.com/i1813181/fc2ee78305859fbf.png)
![](https://img.haomeiwen.com/i1813181/91cdad9008f800fb.png)
![](https://img.haomeiwen.com/i1813181/815ae7f000b342eb.png)
![](https://img.haomeiwen.com/i1813181/e10916dd9b5d08e6.png)
二、Binder
和Observable一样,观察者也存在特征观察者,例如Binder。
Binder主要有两个特征
1、不会处理错误时间,
2、确保绑定都是在给定线程上执行,默认主线程
![](https://img.haomeiwen.com/i1813181/dbbd4f923e714ea8.png)
由核心逻辑我们知道闭包A之后会调用观察者的on()方法
![](https://img.haomeiwen.com/i1813181/86bdaa86bc55e55d.png)
然后self._binding回调,去看self._bingding的实现,targer和元素作为参数回调给Binder初始化的闭包函数binding。
![](https://img.haomeiwen.com/i1813181/b0ed9e61c63c9ee5.png)
网友评论