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内容有误,暂时先跳过这部分