[TOC]
記錄學習 Rx 過程中的各種操作符以ß及用法還有 tips 等等. 所有彈珠圖均來自 RxMarbles App.
Filtering Opertators
-
ignoreElements: 忽略. next 事件.會接受到結束事件(.completed, .error).
-
filter: filter 接受一個作用於每個事件的predicate closure,當 predicate 結果為 true時通過.
Skipping Opertators
-
skip: skip 操作符允許忽略從第一個到輸入的number個事件.
-
skipWhile 與 skipUntil: 這兩個都是帶條件的 skip 操作符,skipWhile 接受一個斷言來判斷 Skip 哪一個;
而 skipUntil不是接受一個靜態條件,而且是接受另一個 observable, 它會 skip source Observable 的事件直到收到 trigger Observable 的事件.
Taking Opertators
taking 是 skip 的對立面,這樣就很好理解了. 直接放彈珠圖.
Transforming Opertators
-
map: 跟 Swift的map 類似,接受一個閉包然後對每個事件做處理.
-
flatMap: 最開始理解 Swift 的 map和 flatMap 就比較費勁,後來知道 flatMap 的核心就就是:
降維
先看看 flatMap的定義
public func flatMap<O: ObservableConvertibleType>(selector: (E) throws -> O) -> Observable<O.E> {
return FlatMap(source: asObservable(), selector: selector)
}
複製程式碼
在 Rx 中,flatMap可以把一個序列轉換成一組序列,然後再把這一組序列拍扁
成一個序列。拍扁
其實就是降維
的意思.
Combining Opertators
- CombineLatest: combineLatest 操作符用閉包接受每個佇列最新的值,然後最新的值合併成一個新值傳送出去.
- Concat: concat 操作符可以把多個佇列合併起來,合併是順序是按照佇列新增的順序
- Merge: merge操作符也是把對個佇列合併,但與 concat 不同的是它是按照佇列發出事件的時間來合併.
- StartWith: startWith 操作符給一個佇列給定了一個初始值,這個值的型別必須和佇列裡面的元素型別相同.
share 與 shareReplay
如果有多個 observable需要共享同一個事件,就需要用到 share. 有一個情形,如果一個請求需要多次訂閱,但又不想多次請求,那麼就需要多個訂閱者共享一個訂閱者物件. share: 如果訂閱者降到0,會重置佇列重新開始傳送 shareReplay(_): 這裡要傳一個 bufferSize, 在share的基礎上,佇列會從最新的值開始重播bufferSize個值。 詳細連結