开始之前, 先建立一个全局函数:
public func example(of description: String, action: () -> Void) {
print("\n--- Example of:", description, "---")
action()
}
这个函数在下面的例子中都会用到.
下面来看看到底什么是 Observable.
什么是 Observable
在许多例子里, 有讲到 Observable, Observable 序列, 序列, 甚至还有些地方说stream(流), 实际它们都是一样的. 下面将它统一称为序列.
首先需要注意, 序列是异步的.� 序列会产生事件, 产生事件的过程被称为随时间发射(emitting). 在�事件中携带有数据, 数据可以是数值, 也可以是手势的 tap 等.
可以把序列看做是以时间为横轴的一个圆球图.
Observable 的生命期
1---2---3
这样的序列, 每一个点都是一个 next 事件.
如果是下面这样的情况:
1---2---3---Compl
�
最后的那个就是 complete 事件, 表示这个 Observable 的生命期结束.
而 1---2---3---error
, 表示这个 Observable 以错误结束.
一旦结束, 则表明该 Observable 在之后就不会再发射任何事件了.
而在 RxSwift 的源码中, Event 是一个泛型 enum. 它有三种 case:
- next: 包含有数据
- complete: 不包含任何东西
- error: 包含 Swift.error
如下所示:
/// 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
}
下面来实操一下 Observable.
Rx 实操
看看如何创建简单的 Observable:
private func setupObservable() {
example(of: "创建 Observable.") {
let one = 1
let two = 2
let three = 3
let observable = Observable.just(one)
let obv2 = Observable.of(one, two, three)
let obv3 = Observable.from([1, 2, 3])
}
}
上面就是手动创建 Observable 的简单例子.
其中 obv2 和 obv3 都是创建的 Observable<Int>, 而非 Observable<[Int]>, 即序列中的 next 事件含有的是 Int 类型数据, 而非 Int 数组数据.
另外一个着重强调的点是: 只有当 Observable 有了观察者后, 它才开始发射数据.
通过 create 操作符可以按照自己的意愿创建一个 Observable �.