Swift RxSwift专题 : Observer - 观察者

AnyObserver

AnyObserver 可以用来描叙任意一种观察者。

///类型擦除的`ObserverType`。
///
///将操作转发给具有相同`Element`类型的任意底层观察者,隐藏底层观察者类型的细节。
public struct AnyObserver<Element> : ObserverType {
    /// 用E代替元素类型
    public typealias E = Element
    
    /// 匿名事件处理程序类型。
    public typealias EventHandler = (Event<Element>) -> Void

    private let observer: EventHandler

    ///构造一个`on(event)`调用`eventHandler(event)`的实例
    /// - 参数eventHandler:观察序列的事件处理程序events.
    public init(eventHandler: @escaping EventHandler) {
        self.observer = eventHandler
    }
    
    ///构造一个实例,其中`on(event)`调用`observer.on(event)`
    /// - 参数观察者:接收序列事件的观察者。
    public init<O : ObserverType>(_ observer: O) where O.E == Element {
        self.observer = observer.on
    }
    
    ///将`event`发送给此观察者。
    /// - 参数event:事件实例。
    public func on(_ event: Event<Element>) {
        return self.observer(event)
    }

    ///删除观察者类型并返回规范观察者。
    /// - 返回:键入已擦除的观察者。
    public func asObserver() -> AnyObserver<E> {
        return self
    }
}

Binder

Binder 主要有以下两个特征:

  • 不会处理错误事件
  • 确保绑定都是在给定 Scheduler 上执行(默认 MainScheduler

一旦产生错误事件,在调试环境下将执行 fatalError,在发布环境下将打印错误信息。

PS : 关于Binder的内容,是在RxCocoa里面!!!
垃圾中文文档Binder

源文档的Demo内容有误,暂时先跳过这部分
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容