响应式编程
- 响应式编程(Reactive Programming,简称RP)
- 也是一种编程范式,于1997年提出,可以简化异步编程,提供更优雅的数据绑定
- 一般与函数式融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming,简称FRP)
- 比较著名的、成熟的响应式框架
- ReactiveCocoa
- 简称RAC,有Objective-C、Swift版本
- 官网: http://reactivecocoa.io/
- github:https://github.com/ReactiveCocoa
- ReactiveX
- 简称Rx,有众多编程语言的版本,比如RxJava、RxKotlin、RxJS、RxCpp、RxPHP、RxGo、RxSwift等等
- 官网: http://reactivex.io/
- github: https://github.com/ReactiveX
RxSwift
- RxSwift(ReactiveX for Swift),ReactiveX的Swift版本
- 源码:https://github.com/ReactiveX/RxSwift
- 中文文档: https://beeth0ven.github.io/RxSwift-Chinese-Documentation/
- RxSwift的github上已经有详细的安装教程,这里只演示CocoaPods方式的安装
- RxSwift:Rx标准API的Swift实现,不包括任何iOS相关的内容
- RxCocoa:基于RxSwift,给iOS UI控件扩展了很多Rx特性
RxSwift的核心角色
- Observable:负责发送事件(Event)
- Observer:负责订阅Observable,监听Observable发送的事件(Event)
- 图解:
- Event有3种
- next:携带具体数据
- error:携带错误信息,表明Observable终止,不会再发出事件
- completed:表明Observable终止
Event的底层代码:
- 调度者
Scheduler
-
MainScheduler
主线程,与UI相关的任务均在该线程下执行 -
SerialDispatchQueueScheduler
相当于GCD
对应的串行队列 -
ConcurrentDispatchQueueScheduler
相当于GCD
并行队列 -
OperationQueueScheduler
相当于NSOperationQueue
管理者可以设置并发数 -
CurrentThreadScheduler
-当前线程
- 销毁者
Dispose
创建、订阅Observable(一)
Observable创建:
Observable使用subscribe订阅:
Disposable
- 每当Observable被订阅时,都会返回一个Disposable实例,当调用Disposable的dispose,就相当于取消订阅
- 在不需要再接收事件时,建议取消订阅,释放资源。有3种常见方式取消订阅
创建、订阅Observable(二)
定时器创建Observable:
创建Observer
扩展Binder属性
传统的状态监听
- 在开发中经常要对各种状态进行监听,传统的常见监听方案有
- KVO
- Target-Action (...addTarget...)
- Notification
- DelegatepBlock Callback
- 传统方案经常会出现错综复杂的依赖关系、耦合性较高,还需要编写重复的非业务代码
RxSwift的状态监听
按钮点击的监听:
button.rx.controlEvent(.touchUpInside).subscribe(onNext: {
print("按钮被点击了")
}).disposed(by:bag)
下面的方法实现效果与上面的一致:
属性监听:
既是Observable,又是Observer
- 诸如UISlider.rx.value、UTextField.rx.text这类属性值,既是Observable,又是Observer
- 它们是RxCocoa.ControlProperty类型
RxSwift的tableView的应用
注意:如果设置了tableView的delegate,RxSwift所设置的上面的tableview的rx的方法都会失效。