ReactiveCocoa 4 图解之一——事件(Event)

一个事件,由Event类型表现,是用泛化的形式表示有事情发生了。在ReactiveCocoa中,事件是通信的核心。一个事件可以表示一个按钮被按下,从一个API接收到一些信息,错误的发生,或者一个长时间操作的完成。不管哪种情况,都是某些东西产生了事件,并且通过信号(Signal)来发送给任意多个监听器(Observer)。

事件是一个枚举类型,不是表示一个值(value)就是表示下面三种终结事件中的一个:

  1. Next事件提供一个发生源的值。
  2. Failed 事件表示信号正常终结之前发生了错误。事件有一个ErrorType参数,它决定了允许出现在失败事件中的错误类型。如果失败是不被允许的,可以使用NoError类型来防止事件提供任何错误信息。
  3. Complete事件表示信号成功终结,事件源不会再发送任何值。
  4. Interrupted事件表示信号因为取消操作而终结,意味着操作既不是成功也不是失败。

—— ReactiveCocoa 框架概览

1. 事件的内部构造



事件的定义中,有关于事件各种类型是这样表达的:

public enum Event<Value, Error: ErrorType> {
    /// A value provided by the signal.
    case Next(Value)

    /// The signal terminated because of an error. No further events will be
    /// received.
    case Failed(Error)

    /// The signal successfully terminated. No further events will be received.
    case Completed

    /// Event production on the signal has been interrupted. No further events
    /// will be received.
    case Interrupted

    ......
}

Next事件关联的值的类型,Failed事件关联的错误对象的类型,都在事件的类型�声明中用泛型规定好了。所以初始化一个事件时,必须提供泛型标签。

Event的类型

2. 事件的映射



事件有这样两个方法:

  1. map<U>(f: Value ->U) -> Event<U, Event>
  2. mapError<F>(f: Value -> U) -> Event<Value, F>

这个两个方法分别将NextFailed事件关联的值和错误变换成其他的值和错误,甚至是其他类型的值和错误。如何变换由方法参数传入的回调函数决定(也就是你来决定)。这两个方法,尤其是map方法,是信号变形发生的核心(后述)。

Event的映射

3. 关于事件的其他



关于事件还有这些有用的属性和功能:

  1. isTerminating只读属性,如果事件是Next事件,这个属性返回false,如果是其余三种类型的事件会返回true
  2. value只读属性,如果事件是Next事件,这个属性返回事件关联的值,如果是其余三种类型的事件会返回�nil
  3. error只读属性,如果事件是Failed事件,这个属性返回事件关联的错误对象,如果是其余三种类型的事件会返回�nil
  4. ReactiveCocoa重载了==操作符,两个事件对象如果类型相同,并且关联的值(Next事件的情况)相等或错误(Failed事件的情况)相同,那么这两个事件就是相等的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,096评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 人类视觉跟很多动物不同的地方,是人类具有立体视觉,双眼立体视觉可以准确的定位,判断物体的远近,因此对于目标可以很清...
    马可约伯阅读 242评论 0 0
  • 很多人说“用户体验”好的产品叫好产品,这本身就是句废话。 “用户体验”是什么? 产品工程师会跟你谈交互,设计,刚需...
    汤汤阳阅读 393评论 0 2