RxSwift 2 Observable 概述

开始之前, 先建立一个全局函数:

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 {
    /// 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, 而非 Observable<[Int]>, 即序列中的 next 事件含有的是 Int 类型数据, 而非 Int 数组数据.

另外一个着重强调的点是: 只有当 Observable 有了观察者后, 它才开始发射数据.

通过 create 操作符可以按照自己的意愿创建一个 Observable �.

你可能感兴趣的:(RxSwift 2 Observable 概述)