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
监听(主线程监听) - 共享状态变化