Andy矢倉

老板 来杯董小姐 去冰 少糖 多放点小姐

曾梦想 仗贱走天涯 看尽女人和繁华


RxSwift从零入手 - 入门·Observables

在本章节中,你将学习RxSwift的基础知识。你将看到RxSwift解决哪些类型的异步编程问题,以及它提供的解决方案。
此外,本次还会学习几个基本的类,它们允许你创建和观察事件序列,这是Rx框架的基础。
通过学习基础知识和理论,并掌握,当需求变得复杂时才能处理地更得心应手。请不要跳过这些章节!

Observables

什么是observable,它是Rx的核心。接下来我们提到的observableobservable sequencesequence其实都可以理解成序列,你也可以理解成流,不过RxSwift里一般都是说序列,不会说流这个东西,反正你这个概念就阔以了。

Observable只是一个会产生各种事件的序列,当有订阅者订阅各种事件的时候,就会得到相应的事件和值,这些值就和之前提到的一样,可以数值,字符串,甚至是自定义的实例,比如点击事件等。

不过为了更好的理解,我们还是直接上图示比较好(看成时间流即可)。

从左到右的箭头表示时间,编号的圆圈表示序列的元素。元素1将被发射,一段时间之后会发射2和3。你问具体时间?它可能在整个可观察的生命周期中的任何时候。

observable以后我们都会称其为被观察者。

生命周期

在上述的图示里已经展示了被观察者根据时间的飘逸会不断发出一个个元素。下面我们看看点击事件的图示,其实都是一样的。

这个可观察的序列发出三个点击事件,然后结束。这里称为已完成的事件。observable已经终止,就不会再发射任何东西。这是正常的终止。如果有是遇到出错呢。

这个图示就是出错的示例。出错由红X表示。observable发出一个包含错误的事件。这与观察者正常结束并完成事件一样。如果一个observable发出一个错误事件,它也会被终止,也不能再发射任何东西。

我们来简单回顾一下,被观察者发出包含元素的下一事件后,如果需要完成,那就是:

  • 出错而终止,或是
  • 完成事件而终止。
    以上者两种终止都将导致被观察的序列停止发射新的事件。源码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /// 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事件包含了一些Element的实例,.error事件包含了一个Swift.Error的实例,并且.completed事件只是停止事件,不包含任何数据。
现在你明白了可观察序列是什么以及它是做什么了,我们将创建一些可观察的事物来观察它们的行为。

创建observables

更早的文章

RxSwift从零入手 - 介绍

译自:Introducing RxSwift: Reactive Programming with Swift! 简介 “If you’ve ever used an asynchronous callback based API, you’ve probably dealt with hand …

于  RxSwift, Swift4 继续阅读