RxSwift 核心逻辑代码分析
RxSwift的核心逻辑主要包括创建序列,订阅序列,发送事件三步,下面就来从源码的角度来查看这一系列的流程是如何工作的。
// 1、创建序列
let observable = Observable<String>.create { (observer) -> Disposable in
// 3、 发送事件
observer.onNext("发送事件")
observer.onCompleted()
return Disposables.create()
}
// 2、订阅序列
observable.subscribe(onNext: { (text) in
print("订阅到:\(text)")
}, onError: { (error) in
print("error: \(error)")
}, onCompleted: {
print("完成")
}) {
print("销毁")
}
这三步的核心流程图如下:
图片可能看不清RxSwift.xmind下载地址
- 创建序列
let observable = Observable<String>.create { (observer) -> Disposable in
return Disposables.create()
}
流程:
1、首先利用ObservableType的扩展方法create创建了一个AnonymousObservable序列
2、AnonymousObservable类中将外界传递的闭包保存在self._subscribeHandler中
3、AnonymousObservable的结构和继承关系
AnonymousObservable继承Producer类,重写了父类的run方法,而Producer继承Observable类,重写了subscribe方法而Observable遵守了ObservableType协议
- 订阅序列
observable.subscribe(onNext: { (text) in
print("订阅到:\(text)")
}, onError: { (error) in
print("error: \(error)")
}, onCompleted: {
print("完成")
}) {
print("销毁")
}
1、首先observable调用ObservableType的扩展方法subscribe()
2、在这个方法中创建了一个订阅者AnonymousObserver(),然后将外面的订阅操作保存在self._eventHandler中
AnonymousObserver的结构和继承关系
3、self.asObservable().subscribe(observer)将订阅者订阅序列,这句代码相当于AnonymousObservable.asObservable().subscribe(observer)相当于调用了Producer.subscribe(observer)方法,然后调用了子类AnonymousObservable的run方法
4、在AnonymousObservable的run方法中,创建了一个AnonymousObservableSink,把observer保存在Sink的self._observer中,然后调用AnonymousObservableSink的run方法。AnonymousObservableSink继承自Sink。
5、来到parent._subscribeHandler(AnyObserver(self))相当于调用
AnonymousObservable._subscribeHandler(AnyObserver(AnonymousObservableSink))完成订阅者到序列的绑定
AnyObserver是一个结构体,AnyObserver(AnonymousObservableSink)调用了self.observer = observer.on,这里把AnonymousObservableSink中的on方法保存在AnyObserver中
- 发送事件
observer.onNext("发送事件")
1、observer是AnyObserver类型,ObserverType也是遵守的ObserverType协议的,所以onNext中的on方法调用的是AnonymousObservableSink中的on方法
2、然后根据事件类型调用Sink类中的forwardOn方法,然后调用self._observer.on(event)相当于AnonymousObserver.on(),实际上是调用的ObserverBase.on()方法
3.在ObserverBase.on()中调用抽象方法onCore(),实际上调用的是AnonymousObserver.onCore()方法,真正执行之前保存的订阅操作self._eventHandler(event)
以上就是整个RxSwift从创建序列、订阅序列、发送事件的核心逻辑处理。