RxSwift - 入門介紹

RxSwift - 入門介紹

什麼是Rx

若是是iOS程序員,那麼你們確定熟悉action-target模式、delegate模式或者通知(notification),這些模式基本都是用來解決事件響應的問題,action-target就不用說了,UIButton就是基於這個模式來響應事件的,delegate也是同樣的,好比說UIAlertViewDelegate,這個協議定義了不少UIAlertView事件響應的回調方法,Notification有點區別,它是採用訂閱-通知的方式,而且能夠有多個響應的對象。react

Rx全名是ReactiveX,是一個函數響應式框架,遵循Functional Reactive Programming(FRP)的設計規範,它把事件封裝成信號流,並採用觀察者模式來實現。git

例子(HelloWorld!)

先來看個簡單的例子,這裏是demo工程,下載到本地,用XCode打開,點擊按鈕的時候,能夠看到輸出了"HelloWorld!",打開RxSwiftViewController文件,看按鈕響應的那段代碼。程序員

@objc func onClicked(_ sender: Any?) {
        let observable = Observable<String>.create { (observer) -> Disposable in
            observer.on(Event.next("HelloWorld!"))
            observer.onCompleted()
            
            return Disposables.create()
        }
        
        let disposeBag = DisposeBag()
        
        observable.subscribe(onNext: { (str) in
            print(str)
        }, onError: { (error) in
            
        }, onCompleted: {
            
        }).disposed(by: disposeBag)
    }

在方法裏面先定義了一個Observable對象,這個叫可觀察序列(後面會解釋),這個對象是能夠訂閱的,至關於觀察者模式中的被觀察者,subscribe即是它的訂閱方法,當調用subscribe的時候,會觸發observer.on(Event.next("next"))和observer.onCompleted()的執行,而且會在onNext和onCompleted中響應,因此就打印出了"HelloWorld!"。github

這裏是最簡單的狀況,實際運用中會碰到更復雜的狀況,不過別小心,先把簡單的理解透了,複雜的就好理解了。閉包

可觀察序列(Observable)

可觀察序列,也就是能發送一些事件流的事物,什麼是事件流?最多見的按鈕的連續點擊即是一個事件流。框架

可觀察序列能夠發送三種類型的事件:一、發送數據(Next),二、遇到問題(Error),三、發送完成(Completed)。好比上面的例子,observable發送了一個Next事件「observer.on(Event.next("HelloWorld!"))」以及一個Completed事件「observer.onCompleted()」。當遇到錯誤的時候,還能夠發送Error事件。函數

事件的定義以下,是個枚舉設計

public enum Event<Element> {
    /// Next element is produced.
    case next(Element)

    /// Sequence terminated with an error.
    case error(Swift.Error)

    /// Sequence completed successfully.
    case completed
}

觀察者

觀察者能夠訂閱序列的事件。好比上面的代碼裏的subscribe。原型以下:code

func subscribe(onNext: ((Self.E) -> Swift.Void)? = default, onError: ((Error) -> Swift.Void)? = default, onCompleted: (() -> Swift.Void)? = default, onDisposed: (() -> Swift.Void)? = default) -> Disposable

訂閱的時候把對應的響應放進對應的閉包裏。server

訂閱的序列有兩種類型:

  1. 冷序列:只有觀察者訂閱這個序列的時候,纔會發送事件,好比上面代碼中Observable。
  2. 熱序列:無論有沒有觀察者訂閱,都會發送事件,好比按鈕的點擊,無論有沒有觀察者,只要用戶點擊了,都會發送點擊事件。

總結

Rx其實很簡單,就是一個觀察者模式的應用,Observable發送事件,observer訂閱事件,收到相應的事件做出相應的處理。

相關文章
相關標籤/搜索