RxSwift源码解析

RxSwift到底解决什么问题

2018-02-23  本文已影响335人  狼性刀锋

ObserverType

public protocol ObserverType {
    /// The type of elements in sequence that observer can observe.
    associatedtype E

    /// Notify observer about sequence event.
    ///
    /// - parameter event: Event that occurred.
    func on(_ event: Event<E>)
}

/// Convenience API extensions to provide alternate next, error, completed events
extension ObserverType {
    
    /// Convenience method equivalent to `on(.next(element: E))`
    ///
    /// - parameter element: Next element to send to observer(s)
    public func onNext(_ element: E) {
        on(.next(element))
    }
    
    /// Convenience method equivalent to `on(.completed)`
    public func onCompleted() {
        on(.completed)
    }
    
    /// Convenience method equivalent to `on(.error(Swift.Error))`
    /// - parameter error: Swift.Error to send to observer(s)
    public func onError(_ error: Swift.Error) {
        on(.error(error))
    }
}

ObserverType,观察者核心函数func on(_ event: Event<E>),观察者一旦观察到变化,立马向外部发送信息。
RxSwift 有三个非常重要的角色,被观察者(ObservableType),观察者(ObserverType),以及订阅者(Subscriber)。打个简单的比方: A 让C 干一件事,但是C呢只知道做事情,其他的不管,因此A不知道C事情做的怎么样,做的好不好,所以A请B帮忙,B并不会帮C做任何事情,他只负责监察C的工程进度,一旦有了新的进展立马汇报给A,然后A在做相应的处理.
A :老板
C: 工人
B:监工
三者构成一个完整的工作体系。
那么在没有使用RxSwift之前,这套系统是怎么工作的呢?

但是不管使用哪种方式其本质上并没有什么区别,上述两种模式只不过是一人分饰两角的结果。那么使用RxSwift到底有什么优势呢?

想象一下场景:a把事情交给b,b又把事情交给c,那么又是什么情况呢?
如果使用委托模式,那么a与b需要签订协议,b与c同样需要签订协议
如果使用观察模式呢,那么a需要监听b,b监听c
显然随着中间层数越来越越多,代码变得越来越复杂臃肿,越来越艰涩难懂,维护起来越来越难。其具体表现在于

综上所述我们需要的是什么呢?

RxSwift解决的就是这个,通过设计ObservableTypeObserverType核心协议,让这种概念更加更加清晰,一旦某个类同时支持ObservableTypeObserverType协议那么,就可以做拼接,就像一个水管,要把多个水管拼接起来,必须要在水管连接处添加套筒,而同时支持这两个协议的类就相当于自带套筒的水管,可以自由拼接其他水管,是那么的自然,轻松。

上一篇下一篇

猜你喜欢

热点阅读