RxSwift笔记 - 特征序列
除了可观察序列Observable,RxSwift还为我们提供了一些特征序列(Traits):Single、Completable、Maybe、Driver、ControlEvent。
我们可以将这些 Traits 看作是 Observable 的另外一个版本。
1.Single
Single是 Observable的另外一个版本。但它不像Observable 可以发出多个元素,它要么只能发出一个元素,要么产生一个error事件。
- 发出一个元素,或一个
error事件 - 不会共享状态变化
应用场景:
Single比较常见的例子就是执行HTTP请求,然后返回一个应答或错误。不过我们也可以用Single来描述任何只有一个元素的序列。
asSingle()
我们可以通过调用Observable 序列的.asSingle()方法,将它转换为 Single
2.Completable
Completable是 Observable的另外一个版本。不像Observable可以发出多个元素,它要么只能产生一个completed事件,要么产生一个 error事件。
- 不会发出任何元素
- 只会发出一个
completed事件或者一个error事件 - 不会共享状态变化
应用场景
Completable和Observable<Void> 有点类似。适用于那些只关心任务是否完成,而不需要在意任务返回值的情况。比如:在程序退出时将一些数据缓存到本地文件,供下次启动时加载。像这种情况我们只关心缓存是否成功。
3.Maybe
Maybe同样是Observable 的另外一个版本。它介于 Single和 Completable之间,它要么只能发出一个元素,要么产生一个 completed 事件,要么产生一个error事件。
- 发出一个元素、或者一个 completed 事件、或者一个 error 事件
不会共享状态变化
应用场景
Maybe 适合那种可能需要发出一个元素,又可能不需要发出的情况。
asMaybe()
我们可以通过调用 Observable序列的 .asMaybe()方法,将它转换为 Maybe。
4.Driver
如果我们的序列满足如下特征,就可以使用它:
- 不会产生
error事件 - 一定在主线程监听(
MainScheduler) - 共享状态变化(
shareReplayLatestWhileConnected)
为什么要使用 Driver?
(1)Driver最常使用的场景应该就是需要用序列来驱动应用程序的情况了,比如:
-
通过
CoreData模型驱动UI -
使用一个
UI元素值(绑定)来驱动另一个UI元素值
(2)与普通的操作系统驱动程序一样,如果出现序列错误,应用程序将停止响应用户输入。
(3)在主线程上观察到这些元素也是极其重要的,因为UI元素和应用程序逻辑通常不是线程安全的。
(4)此外,使用构建Driver的可观察的序列,它是共享状态变化。
5.ControlProperty
(1)ControlProperty 是专门用来描述 UI 控件属性,拥有该类型的属性都是被观察者(Observable)。
(2)ControlProperty具有以下特征:
- 不会产生
error事件 - 一定在
MainScheduler订阅(主线程订阅) - 一定在
MainScheduler监听(主线程监听) - 共享状态变化
6.ControlEvent
基本介绍
(1)ControlEvent是专门用于描述 UI 所产生的事件,拥有该类型的属性都是被观察者(Observable)。
(2)ControlEvent 和 ControlProperty 一样,都具有以下特征:
- 不会产生
error事件 - 一定在
MainScheduler订阅(主线程订阅) - 一定在
MainScheduler监听(主线程监听) - 共享状态变化