30天學RxSwift——Observer

weixin_34146805發表於2016-03-20

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結合進來,將具體與抽象結合進行介紹。

相關文章