RxSwift筆記 - 操作符

原文鏈接:[http://www.lxweimin.com/p/f61a5a988590], 此文為筆記整理,感謝原作者

1.變換操作(Transforming Observables)

  • buffer
    buffer方法作用是緩沖組合,第一個參數是緩沖時間,第二個參數是緩沖個數,第三個參數是線程。
    該方法簡單來說就是緩存Observable 中發出的新元素,當元素達到某個數量,或者經過了特定的時間,它就會將這個元素集合發送出來。

  • window
    window 操作符和 buffer十分相似。不過buffer是周期性的將緩存的元素集合發送出來,而window周期性的將元素集合以Observable的形態發送出來。
    同時buffer要等到元素搜集完畢后,才會發出元素序列。而 window可以實時發出元素序列。

  • map
    該操作符通過傳入一個函數閉包把原來的 Observable序列轉變為一個新的 Observable序列。

  • flatMap
    map 在做轉換的時候容易出現“升維”的情況。即轉變之后,從一個序列變成了一個序列的序列。
    flatMap操作符會對源 Observable 的每一個元素應用一個轉換方法,將他們轉換成 Observables。 然后將這些Observables 的元素合并之后再發送出來。即又將其 "拍扁"(降維)成一個Observable 序列。
    這個操作符是非常有用的。比如當 Observable 的元素本生擁有其他的 Observable時,我們可以將所有子 Observables的元素發送出來。

  • flatMapLatest
    flatMapLatestflatMap 的唯一區別是:flatMapLatest只會接收最新的value事件。

  • concatMap
    concatMapflatMap的唯一區別是:當前一個Observable 元素發送完畢后,后一個Observable才可以開始發出元素。或者說等待前一個 Observable產生完成事件后,才對后一個Observable 進行訂閱。

  • scan
    scan就是先給一個初始化的數,然后不斷的拿前一個結果和最新的值進行處理操作。

  • groupBy
    groupBy 操作符將源 Observable分解為多個子Observable,然后將這些子Observable發送出來。
    也就是說該操作符會將元素通過某個鍵進行分組,然后將分組后的元素序列以 Observable的形態發送出來。


2.過濾操作符(Filtering Observables)

  • filter
    該操作符就是用來過濾掉某些不符合要求的事件。

  • distinctUntilChanged
    該操作符用于過濾掉連續重復的事件。

  • single
    限制只發送一次事件,或者滿足條件的第一個事件。
    如果存在有多個事件或者沒有事件都會發出一個 error 事件。
    如果只有一個事件,則不會發出 error事件。

  • elementAt
    該方法實現只處理在指定位置的事件。

  • ignoreElements
    該操作符可以忽略掉所有的元素,只發出 errorcompleted 事件。
    如果我們并不關心 Observable的任何元素,只想知道 Observable在什么時候終止,那就可以使用 ignoreElements 操作符。

  • take
    該方法實現僅發送 Observable序列中的前 n 個事件,在滿足數量之后會自動.completed

  • takeLast
    該方法實現僅發送 Observable序列中的后 n 個事件。

  • skip
    該方法用于跳過源 Observable 序列發出的前 n 個事件。

  • Sample
    Sample除了訂閱源Observable外,還可以監視另外一個 Observable, 即 notifier
    每當收到notifier事件,就會從源序列取一個最新的事件并發送。而如果兩次 notifier事件之間沒有源序列的事件,則不發送值。

  • debounce
    debounce操作符可以用來過濾掉高頻產生的元素,它只會發出這種元素:該元素產生后,一段時間內沒有新元素產生。
    換句話說就是,隊列中的元素如果和下一個元素的間隔小于了指定的時間間隔,那么這個元素將被過濾掉。
    debounce常用在用戶輸入的時候,不需要每個字母敲進去都發送一個事件,而是稍等一下取最后一個事件。


3.條件和布爾操作符(Conditional and Boolean Operators)

  • amb
    當傳入多個 Observablesamb操作符時,它將取第一個發出元素或產生事件的Observable,然后只發出它的元素。并忽略掉其他的 Observables

  • takeWhile
    該方法依次判斷 Observable 序列的每一個值是否滿足給定的條件。 當第一個不滿足條件的值出現時,它便自動完成。

  • takeUntil
    除了訂閱源 Observable外,通過takeUntil方法我們還可以監視另外一個Observable, 即 notifier
    如果 notifier發出值或 complete通知,那么源 Observable 便自動完成,停止發送事件

  • skipWhile
    該方法用于跳過前面所有滿足條件的事件。
    一旦遇到不滿足條件的事件,之后就不會再跳過了。

  • skipUntil
    同上面的takeUntil 一樣,skipUntil 除了訂閱源Observable 外,通過 skipUntil方法我們還可以監視另外一個 Observable, 即 notifier
    takeUntil相反的是。源 Observable序列事件默認會一直跳過,直到 notifier 發出值或complete通知。


4.結合操作(Combining Observables)

  • startWith
    該方法會在 Observable序列開始之前插入一些事件元素。即發出事件消息之前,會先發出這些預先插入的事件消息。

  • merge
    該方法可以將多個(兩個或兩個以上的)Observable序列合并成一個 Observable序列

  • zip
    該方法可以將多個(兩個或兩個以上的)Observable序列壓縮成一個 Observable序列。
    而且它會等到每個 Observable事件一一對應地湊齊之后再合并。

  • combineLatest
    該方法同樣是將多個(兩個或兩個以上的)Observable序列元素進行合并。
    但與zip 不同的是,每當任意一個 Observable有新的事件發出時,它會將每個 Observable 序列的最新的一個事件元素進行合并。

  • withLatestFrom
    該方法將兩個Observable序列合并為一個。每當 self隊列發射一個元素時,便從第二個序列中取出最新的一個值。

  • switchLatest
    switchLatest 有點像其他語言的switch方法,可以對事件流進行轉換。
    比如本來監聽的subject1,我可以通過更改 variable里面的 value 更換事件源。變成監聽subject2


5.算數、以及聚合操作(Mathematical and Aggregate Operators)

  • toArray
    該操作符先把一個序列轉成一個數組,并作為一個單一的事件發送,然后結束。

  • reduce
    reduce 接受一個初始值,和一個操作符號。
    reduce 將給定的初始值,與序列里的每個值進行累計運算。得到一個最終結果,并將其作為單個值發送出去。

  • concat
    concat 會把多個 Observable 序列合并(串聯)為一個 Observable 序列。
    并且只有當前面一個 Observable 序列發出了completed 事件,才會開始發送下一個 Observable 序列事件。


6.連接操作(Connectable Observable Operators)

可連接的序列和一般序列不同在于:有訂閱時不會立刻開始發送事件消息,只有當調用 connect()之后才會開始發送值。

可連接的序列可以讓所有的訂閱者訂閱后,才開始發出事件消息,從而保證我們想要的所有訂閱者都能接收到事件消息。

  • publish
    publish方法會將一個正常的序列轉換成一個可連接的序列。同時該序列不會立刻發送事件,只有在調用 connect之后才會開始。

  • replay
    replay同上面的publish方法相同之處在于:會將將一個正常的序列轉換成一個可連接的序列。同時該序列不會立刻發送事件,只有在調用 connect之后才會開始。
    replaypublish不同在于:新的訂閱者還能接收到訂閱之前的事件消息(數量由設置的 bufferSize決定)。

  • multicast
    multicast方法同樣是將一個正常的序列轉換成一個可連接的序列。
    同時 multicast方法還可以傳入一個Subject,每當序列發送事件時都會觸發這個Subject的發送。

  • refCount
    refCount操作符可以將可被連接的Observable轉換為普通 Observable
    即該操作符可以自動連接和斷開可連接的 Observable。當第一個觀察者對可連接的Observable 訂閱時,那么底層的Observable將被自動連接。當最后一個觀察者離開時,那么底層的Observable將被自動斷開連接。

  • share(relay:)
    該操作符將使得觀察者共享源 Observable,并且緩存最新的n個元素,將這些元素直接發送給新的觀察者。
    簡單來說 shareReplay 就是replayrefCount 的組合。


6.其他實用的操作符(Observable Utility Operators)

  • delay
    該操作符會將Observable 的所有元素都先拖延一段設定好的時間,然后才將它們發送出來。

  • delaySubscription
    使用該操作符可以進行延時訂閱。即經過所設定的時間后,才對 Observable 進行訂閱操作。

  • materialize
    該操作符可以將序列產生的事件,轉換成元素。
    通常一個有限的Observable將產生零個或者多個 onNext事件,最后產生一個 onCompleted 或者onError事件。而 materialize操作符會將 Observable 產生的這些事件全部轉換成元素,然后發送出來。

  • dematerialize
    該操作符的作用和 materialize正好相反,它可以將 materialize轉換后的元素還原。

  • timeout
    使用該操作符可以設置一個超時時間。如果源Observable在規定時間內沒有發任何出元素,就產生一個超時的 error事件。

  • using
    使用using操作符創建Observable 時,同時會創建一個可被清除的資源,一旦 Observable終止了,那么這個資源就會被清除掉了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。