Swift-响应式编程
定义
- 响应式编程(Reactive Programming, 简称RP)
- 一种编程范式,于1997年提出,可以简化异步编程,提供更优雅的数据绑定
- 一般与函数式融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming, 简称FRP)
- 比较著名的、成熟的响应式编程
- ReactiveCocoa,简称RAC,有OC,Swift版本
- ReactiveX,简称Rx,有众多编程语言版本,比如:RxJava, RxKotlin, RxJS, RxCpp, RxPHP, RxGo, RxSwift等等.
- 官网:http://reactivex.io/
- github: https://github.com/ReactiveX
RxSwift
- RxSwift(ReactiveX for Swift),ReactiveX的Swift版本
- 模块说明
- RxSwift:Rx标准API的Swift实现,不包括任何iOS相关的内容
- RxCocoa:基于RxSwift,给iOS UI控件扩展了很多Rx特性
RxSwift的核心角色
- Observable:负责发送事件(Event)
- Observer:负责订阅Observable,监听Observable发送的事件(Event)
1
2
3
4
5
6
7
8
9
10public enum Event<Element> {
/// Next element is produced.
case next(Element)
/// Sequence terminated with an error.
case error(Swift.Error)
/// Sequence completed successfully.
case completed
} - Event有3种
- next:携带具体数据
- error:携带错误信息,表明Observable终止,不会再发出事件
- completed:表明Observable终止,不会再发出事件
创建、订阅Observable示例1
1 | var observable = Observable<Int>.create { observer in |
创建、订阅Observable示例1
1 | let observable = Observable<Int>.timer(.seconds(3), |
创建Observer
1 | let observer = AnyObserver<Int>.init { event in |
扩展Binder属性
1 | extension Reactive where Base: UIView { |
传统的状态监听
- 在开发中经常要对各种状态进行监听,传统的常见监听方案有:
- KVO
- Target-Action
- Notification
- Delegate
- Block Callback
- 传统文字经常会出现错综复杂的依赖关系、耦合性较高,还需要编写重复的非业务代码
RxSwift的状态监听示例1:
1 | //按钮点击 |
RxSwift的状态监听示例2:
1 | class Dog: NSObject { |
既是Observable,又是Observer
1 | Observable.just(0.8).bind(to: slider.rx.value).dispose() |
- 诸如UISlider.rx.value、UTextField.rx.text这类属性值,既是Observable,又是Observer
- 它们是RxCocoa.ControlProperty类型
Disposable
- 每当Observable被订阅时,都会返回一个Disposable实例,当调用Disposable的dispose,就相当于取消订阅
- 在不需要再接收事件时,建议取消订阅,释放资源。有3种常见方式取消订阅
1 | // 立即取消订阅(一次性订阅) |
参考
李明杰老师课件
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ivan's Blog!
评论









