美文网首页RxSwift干货RxSwift
30天学RxSwift——Observer

30天学RxSwift——Observer

作者: Linqingmo | 来源:发表于2016-03-20 10:42 被阅读677次

    Observer即观察者,在RxSwift中有许多名称的Observer,ObserveBase,AnonymousObserver,AnyObserver等。这里只讨论声明为public的AnyObserver,internal的类型我们在使用框架的时候不会接触到,只有当我们想要深入了解RxSwift时才有用。

    AnyObserver在文档中的解释是A type-erased `ObserverType`,就是对ObserverType的简单的实现。ObserverType是观察者需要遵从的协议,其中最重要的是func on(event: Event)。这里先看一下Event是什么。

    public enum Event: CustomDebugStringConvertible {

       case Next(Element)

       case Error(ErrorType)

       case Completed

    }

    Event即是Next,Error,Completed三种信号的事件。

    从语意理解,func on(event: Event)有一句说明:Notify observer about sequence event.通知观察者事件序列。即事件序列的变化都会通知观察者,而这个方法就是处理事件变化。ObserverType协议还扩展了简便的方法:final func onNext(element: E),final func onCompleted(),final func onError(error: ErrorType)。

    现在再回过头看就知道AnyObserver是做什么的了。这是Rx框架中一个重要的概念,在使用过程中会不停地用到,特别是当你不满足仅仅是使用RxSwift与RxCocoa,而是想将Rx框架融入整个工程时,这是个必须要掌握的知识。

    对于AnyObserver我们还需要掌握的是init方法。public init(eventHandler: EventHandler)和public init(_ observer: O)。前一个用事件处理方法来初始化,后一个是用另一个ObserverType来初始化(这里两个ObserverType的元素应该是一样的。)。从源码中可以验证前面的观点,ObserverType最重要的是func on(event: Event)。

    写下这些文章首要的目的就是希望能最快地在实际的项目中使用Rx框架,与我学习Swift的目的是一样的:希望以更优雅的方式编程。因此虽然只讲了几个基础的概念,后面开始要将RxCocoa结合进来,将具体与抽象结合进行介绍。

    相关文章

      网友评论

        本文标题:30天学RxSwift——Observer

        本文链接:https://www.haomeiwen.com/subject/mebzkttx.html