本篇作为新手读的懂的RxSwift源码解析系列第零篇,不会过多地介绍RxSwift的优点。因为既然读者已经开始阅读RxSwift的源码了,必然是已经对RxSwift有了一定的了解了,所以这里只简单谈一下笔者的感受。
笔者认为,RxSwift作为一个响应式编程框架,带来的第一个好处在于逻辑的聚合。大家在平常APP开发过程中,会处理大量的用户交互事件,并且会涉及到大量的逻辑跳转,通过闭包、代理、通知、KVO等等方式来传递数据。这就会导致业务逻辑的分散,同一条业务链很可能分散在多个类当中,从而给调试和排错带来难度,也就容易为Bug的出现埋下隐患。而通过RxSwift,则可以通过RxSwift提供的各种操作符实现逻辑的聚合。
RxSwift带来的另一个好处在于响应式的编程思想,将所有的事件都描述成一个可监听的序列,并提供大量功能各异的操作符,通过声明式的语句来完成数据的获取,转换,结合及绑定。
二、为什么要阅读RxSwift源码在这里,笔者不想说太多关于阅读源码的好处,因为都是套话,只想放一张图:
由于RxSwift是一个高度封装的框架,代码高度抽象,随着不同操作符的作用,其调用链也会变得极度复杂,这就给我们debug带来了巨大的挑战。没错,为了能够对RxSwift进行调试,这就是笔者阅读RxSwift源码最原始的动力。
三、RxSwift的核心概念RxSwift的核心概念主要有三个:Observable,Observer,Operator。
Observable说Observable,需要先说两个协议。ObservableConvertibleType和ObservableConvertibleType。
publicprotocolObservableConvertibleType{associatedtypeElementfuncasObservable()-ObservableElement}
publicprotocolObservableType:ObservableConvertibleType{funcsubscribeObserver:ObserverType(_observer:Observer)-DisposablewhereObserver.Element==Element}extensionObservableType{publicfuncasObservable()-ObservableElement{Observable.create{oinself.subscribe(o)}}}
ObservableConvertibleType协议定义了一个方法,那就是asObservable(),返回一个Observable。
ObservableType则定义了一个subscribe(_observer:Observer),即订阅一个Observer.
Observable就是遵循了ObservableType的class。
综上,Observable就是一个可以通过调用subscribe方法被订阅的可观察序列。
ObserverObserver,就是一个观察者,它也是通过一个协议(ObserverType)实现的:
publicprotocolObserverType{associatedtypeElementfuncon(_event:EventElement)}
ObserverType定义了一个on(_event:Event)方法,参数是Event类型:
frozenpublicenumEventElement{///Nextelementisproduced.casenext(Element)///Sequenceterminatedwithanerror.caseerror(Swift.Error)///Sequence