RxSwift学习之Observable的新建、订阅及取消订阅

2020-01-08 23:40:14于丽

前言

我们在前一篇基础之上,本文将会介绍 RxSwift 中的 Observables 部分。

在 RxSwift 中 Observable 也被称为 Observable Sequence、Sequence、Stream。Observable 会以异步的方式不断的发射事件形成事件流,并且数据也会沿着事件流进行传播。下图是事件流的图像化表示:

rxswift,observable,教程,swift

其中从左到右的箭头代表时间轴,而三个圆圈则构成了可观察序列。而整个过程会按照从左到右的顺序。另外,事件可能在可观察序列生命周期内的任意时刻被触发。

Observable 生命周期

上图中的三个圆圈其实就是 RxSwift 中的 next 事件。除了 next 之外,RxSwift 中还有 completed 和 error 事件,而这两者都意味事件流生命周期的总结。

completed 所表示的正常终结:

rxswift,observable,教程,swift

error 所表示的异常终结:

rxswift,observable,教程,swift

在源码中这三类事件的定义如下:


/// 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 事件会携带一个实例进行传播,error 事件会携带一个 Error 实例,completed 则什么都不会携带。

新建 Observable

在所有 Observable 对象的创建方法中,最简单的就是 just :


// 1
let one = 1 
let two = 2 
let three = 3

// 2 
let observable: Observable<Int> = Observable<Int>.just(one)

作为类方法 just 所创建的 Observable 对象只会包含一个元素。但是大多数时候,Observable 对象在其生命周期内会包含多个元素,而创建方法也很简单:


let observable2 = Observable.of(one, two, three)

可能上面的代码会给人一种误导,让人觉得 observable2 中的数据可能是一个数组类型。不过好在我们可以通过下面的代码进行检验:


observable2.subscribe(onNext: { element in
  print(element) 
 })
 
/* 打印结果:
1
2
3
*/

而真正创建数组类型变量的方法是:


let observable3 = Observable.of([one, two, three])
observable3.subscribe(onNext: { element in
  print(element) 
 })
 
/* 打印结果:
[1, 2, 3]
*/