- Variable
- 说明
- 说明
Variable
在 Swift 中我们经常会用 var 关键字来声明变量。RxSwift 提供的 Variable 实际上是 var 的 Rx 版本,你可以将它看作是 RxVar。
我们来对比一下 var 以及 Variable 的用法:
使用 var:
// 在 ViewController 中var model: Model? = nil {didSet { updateUI(with: model) }}override func viewDidLoad() {super.viewDidLoad()model = getModel()}func updateUI(with model: Model?) { ... }func getModel() -> Model { ... }
使用 Variable:
// 在 ViewController 中let model: Variable<Model?> = Variable(nil)override func viewDidLoad() {super.viewDidLoad()model.asObservable().subscribe(onNext: { [weak self] model inself?.updateUI(with: model)}).disposed(by: disposeBag)model.value = getModel()}func updateUI(with model: Model?) { ... }func getModel() -> Model { ... }
第一种使用 var 的方式十分常见,在 ViewController 中监听 Model 的变化,然后刷新页面。
第二种使用 Variable 则是 RxSwift 独有的。Variable 几乎提供了 var 的所有功能。另外,加上一条非常重要的特性,就是可以通过调用 asObservable() 方法转换成序列。然后你可以对这个序列应用操作符,来合成其他的序列。所以,如果我们声明的变量需要提供 Rx 支持,那就选用 Variable 这个类型。
说明
Variable 封装了一个 BehaviorSubject,所以它会持有当前值,并且 Variable 会对新的观察者发送当前值。它不会产生 error 事件。Variable 在 deinit 时,会发出一个 completed 事件。
