RxSwift 核心逻辑代码分析

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从创建序列、订阅序列、发送事件的核心逻辑处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值