RxSwift,是Swift的函数响应式编程框架,以函数为工具,绑定数据联动,数据改变实时反映到结果呈现。这对我来说是一种全新的编程思想,我想去了解,学习。
本文记录了我学习RxSwift的历程,包含遇到的各种问题和我的一些理解。
运行官方示例
从github上克隆RxSwift项目
1 | git clone git@github.com:ReactiveX/RxSwift.git |
双击打开Rx.xcworkspace
,在工程中选择RxExample-iOS
或RxExample-macOS
,选择模拟器或真机,运行。
项目集成RxSwift
将RxSwift集成到项目中,推荐使用CocoaPods的方式,pod版本1.3.1
亲测有效:
创建项目时勾选
Include Unit Tests
,包含单元测试。创建
Podfile
文件,输入如下内容:
1 | # Podfile |
- 将工程名和单元测试名换成自己的,执行命令:
1 | pod install |
问题
问题1. 可能由于CocoaPods版本过低,pod失败,建议更新后重试,执行更新命令:
1 | sudo gem install cocoapods |
问题2.
1 | None of your spec sources contain a spec satisfying the dependency: `RxSwift (~> 4.0)`. |
执行命令:
1 | pod setup |
实践
RxSwift的本质是观察者模式,时刻观察者一个序列,当序列达到预定条件,执行某种操作。比如钟表时间是一个序列,当到6点时就下班。时间是一个被观察的序列,6点是预定条件,下班是操作。
Rx中用observable
表示变化序列,也就是被观察者。到达预定条件的操作用subscribe
表示,被称为订阅。订阅完成之后,要对其进行清理,清理方式是丢掉处理袋DisposeBag
中。
这是一个基本的Rx执行流程。
具体实现
用RxSwift写一个基本的按钮点击事件。在ViewController
中引入头文件:
1 | import RxSwift |
在Main.storyboard
中拖入按钮,并连线到ViewController
:
1 | weak var button: UIButton! |
创建全局变量处理袋:
1 | private let disposeBag = DisposeBag() |
给按钮添加点击事件:
1 | button.rx.tap |
完整代码:
1 | import UIKit |
其他
demo地址:XDRxSwiftLearn
学习资料: