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<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 �.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇文章介主要绍RxJava中操作符是以函数作为基本单位,与响应式编程作为结合使用的,对什么是操作、操作符都有哪些...
    嘎啦果安卓兽阅读 2,893评论 0 10
  • 原创 2017-06-13 RxSwift 这个框架RP框架相信你应该不陌生了,在Objective-C中我们使用...
    一根聪阅读 6,283评论 4 14
  • 前面的内容中已经学习了如何创建, 过滤, 变换 observable 的事件序列, 尤其是需要留意 flatMap...
    貘鸣阅读 1,786评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 作者: maplejaw本篇只解析标准包中的操作符。对于扩展包,由于使用率较低,如有需求,请读者自行查阅文档。 创...
    maplejaw_阅读 45,843评论 8 93