一、什么是 Observable?
Observable
是 Rx 的核心。我们将会花一些时间来探讨:
- 什么是 observables?
- 如何创建 observables?
- 如何使用 observables?
在 Rx 的世界里,你将会看到 “observable”,“observable sequence” 以及 “sequence” 互换使用。实际上,它们都是一样的意思。你甚至可能偶尔还会看到 “stream” 时不时的抛出来,特别是来自那些(从一个不同的响应式编程环境进入到 RxSwift 的)开发者们。“stream” 也指的是同样的事物,但是在 RxSwift 中,所有人都习惯称之为 sequence
,而不是 stream
。
在 RxSwift 中:
...或者是以 sequence 的形式工作的事物。
Observable
只是一个序列(sequence),并且具有一些特殊的能力。其中之一,实际上也是最重要的一个,就是 它是异步的(asynchronous.)
。在一段时间内,Observables 可以产生事件,这个过程被称之为 发射/发出(emitting)。事件可以包含值(value),例如 数字 或者 自定义类型的实例,或者它们可以是识别的手势,例如 点击(tap)。概念化这一点的最好方法之一是使用大理石图(只是在时间线上绘制的值)。
从左到右的箭头表示时间,编号的圆圈表示序列的元素。元素1将被发射,一段时间将会过去,然后2和3将被发射。你问多少时间? 它可能在可观察者(
observable
)的整个生命周期的任何阶段。 这将带您认识可观察者的生命周期。
二、observable 的生命周期(lifecycle)
在之前的 marble diagram 中,observable 发射了3个元素。当 observable 发射一个元素时,它是在所谓的 next 事件
中发生的。
这里是另外一个 marble diagram,这次包含一个垂直条,它表示 observable 之路的尽头。
这个 observable 发射了3个 tap(点击)事件,然后结束。这个被称为
completed
事件,因为它已经被终止。例如:也许点击事件在一个已经被 dismiss 的视图上。重要的是,observable 已经终止,并且不能够再发射任何东西。这种是正常终止。然后,有时候一些事情会出错。一个错误已经在这个 marble diagram 上发生,错误由红色 X 来表示。observable 发出包含错误的
error 事件
。这与当 observable 正常终止并发出一个 completed 事件没有什么不同。如果 observable 发出一个错误事件,它也会被终止,并且不能再发出任何其它东西。
三、快速回顾
- observable 发出包含元素(element) 的
next
事件,它可以继续这样做,直到它: - 发出
error
事件并终止 - 发出
completed
事件并终止 - 一旦 observable 被终止,它就不再发出事件。
直接从 RxSwift 的源代码中举例说明,这些事件都是用枚举的 case 来表示的。
/// Represents a sequence event.
///
/// Sequence grammar:
/// **next\* (error | completed)**
public enum Event<Element> {
/// Next element is produced.
case next(Element)
/// Sequence terminated with an error.
case error(Swift.Error)
/// Sequence completed successfully.
case completed
}
在这里,你可以看到:
.next
事件包含一个 Element 的实例。
.error
事件包含一个 Swift.Error 的实例。
.completed
事件只是简单地停止事件,不包含任何数据。