RxSwift使用步骤:
- 创建序列
- 订阅信号
- 发送信号
示例代码
let disposbag: DisposeBag = DisposeBag()
// 创建序列
let ob:Observable<Any> = Observable.create { (observer) -> Disposable in
// 发送信号
observer.onNext("text")
observer.onCompleted()
return Disposables.create()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// 订阅信号
ob.subscribe(onNext: { (text) in
print(text)
}, onCompleted:{
print("订阅完成")
}).disposed(by: disposbag)
}
执行结果
text
订阅完成
关注点:
- 创建序列做了什么
- 订阅信号做了什么
- 如何将发送信号
接下来进入RxSwift源码世界一探究竟!
创建序列
首先点击create
方法进入源码实现
很遗憾,只有声明,没有实现······
没事,看注释。在项目里搜索create文件。
create AnonymousObservable(subscribe)
综上:
create
方法创建并返回了一个AnonymousObservable
对象,我们暂且称之为序列对象A
,序列对象A
保存了create
方法传入的闭包。
订阅信号
点击subscribe
方法,进入源码。
上面的序列对象A
遵循了ObservableType
$协议,所以进入第二个方法查看。
可以看出subscribe
方法中创建了一个继承自AnonymousObserver
类的观察者observer
,我们暂且称它为观察者对象B
。观察者对象B
保存了EventHandler
闭包,监听了传入的onNext
,onError
,onComplete
,onDisposed
四个闭包。
我们来看看这句代码
self.asObservable().subscribe(observer),
self
其实就是序列对象A
,在AnonymousObservable
中并没有找到asObservable()
实现,通过继承链,AnonymousObservable ->Producer-> Observable
,在父类Observable
中找到了实现,其实没做什么,只是返回了自己。
继续下一步:
AnonymousObservable .subscribe(observer)
。通过继承,AnonymousObservable ->Producer
,在父类Producer
中找到了subscribe
方法,subscribe(observer)
rxAbstractMethod()
是个抽象方法,不在父类上实现,回到AnonymousObservable
类:AnonymousObservableSink(observer: observer, cancel: cancel)
:
保存
observer
,即保存了onNext
,onError
,onComplete
,onDisposed
四个闭包。sink.run(self)
:调用run
,其中parent
是AnonymousObservable
的别名,就是创建序列的时候的AnonymousObservable
。AnyObserver(self)
即AnyObserver(AnonymousObservableSink)
,self.observer = observer.on
,即:self.observer = AnonymousObservableSink.on
,这就将观察者对象B
和序列对象A
的on事件关联起来了。
发送信号
observer.onNext("text")
:
这里的observer
其实就是观察者对象B
要执行观察者对象B
的on
事件,就得回到之前创建时保存的事件闭包,于是走到了AnonymousObservableSink.on
观察者对象B
继承自类ObserverBase
rxAbstractMethod()
是个抽象方法,不在父类上实现,回到AnonymousObserver
类:
最后,在Disposables
中销毁,RxSwift的调用逻辑结束。
初次接触,如有问题或者建议,欢迎大家评论或者私信。
网友评论