RxSwift - Observable 阅读笔记

2017-09-26  本文已影响0人  做iOS的小学僧

什么是 Observable

在 RxSwift 中,所有的事件都是基于队列 (sequence) 的,Observable 会不断在这条队列上发送数据 / 数据序列。而我们通过订阅 Observable ,当有事件被发送,就可以接受到事件通知。

Observable

Observable 生命周期

Observable 会发送三种事件类型,发送包含事件 element 的 next 事件,发送 completed 事件,作为事件序列的完结。

Completed

当有错误发生时,Observable 会发送包含错误信息的 error(Error) 事件。

Error

Observable 可以一直发送 next 事件,直到发送了 error 或者 completed 事件,这条事件序列才会被终止。

Observable 的创建

RxSwift 提供了一系列创建 Observable 的方法

订阅 Observable

RxSwift 使用 subscribe() 来订阅 Observable。这里需要强调的是,任何 Observable 只有在有订阅者时才会发送事件,因此,例如上文提及的 Observable.of(1, 2, 3) 其实没有发送任何事件。只有当通过 subscribe() 订阅时,Observable 才会发送事件

Observable<Int>
    .of(1, 2, 3)
    .subscribe({ event in
        print(event)
    })

打开控制台,就会得到下面的打印结果

next(1)
next(2)
next(3)
completed

定义的 Observable 对象为每个元素发送了 .next 事件。最后发送了 .completed 事件,作为事件序列的结束。

.next 事件的元素是一个 Optional ,因此当需要直接访问这个值时,需要做解包操作

不过 RxSwift 提供了另一种订阅函数来满足订阅要求。

Observable<Int>
    .of(1, 2, 3)
    .subscribe(onNext: { (element) in
        print(element)
    }, onError: { (error) in
        print(error)
    }, onCompleted: {
        print("Completed")
    }, onDisposed: {
        print("Disposed")
    })

Observable 处理与终止

Observable 有订阅者时,才会开始不断发送 .next 事件,直到发送一个 .error 或者 .completed 事件,事件序列结束

我们可以手动的通过取消订阅来终止这个事件序列。

自定义事件

循规蹈矩的 Observable 的创建方式,或多或少都无法满足日常 PM 的需求。所以如何创建包含自定义事件的数据流呢?RxSwift 提供了两种方式

上一篇 下一篇

猜你喜欢

热点阅读