1.Amb
在多個(gè)源 Observables 中, 取第一個(gè)發(fā)出元素或產(chǎn)生事件的Observable 话肖,然后只發(fā)出它的元素
當(dāng)你傳入多個(gè) Observables 到 amb 操作符時(shí),它將取其中一個(gè) Observable:第一個(gè)產(chǎn)生事件的那個(gè) Observable,可以是一個(gè) next晌砾,error 或者 completed 事件。 amb 將忽略掉其他的 Observables座舍。
2.buffer
緩存元素港令,然后將緩存的元素集合,周期性的發(fā)出來
buffer 操作符將緩存 Observable 中發(fā)出的新元素秕磷,當(dāng)元素達(dá)到某個(gè)數(shù)量诵闭,或者經(jīng)過了特定的時(shí)間,它就會(huì)將這個(gè)元素集合發(fā)送出來澎嚣。
3.catchError疏尿、catchErrorJustReturn
catchError 操作符將會(huì)攔截一個(gè) error 事件,將它替換成其他的元素或者一組元素易桃,然后傳遞給觀察者褥琐。這樣可以使得 Observable 正常結(jié)束,或者根本都不需要結(jié)束晤郑。
catchErrorJustReturn 操作符會(huì)將error 事件替換成其他的一個(gè)元素敌呈,然后結(jié)束該序列。
4.combineLatest
當(dāng)多個(gè) Observables
中任何一個(gè)發(fā)出一個(gè)元素造寝,就發(fā)出一個(gè)元素磕洪。這個(gè)元素是由這些 Observables
中最新的元素,通過一個(gè)函數(shù)組合起來的
combineLatest 操作符將多個(gè) Observables
中最新的元素通過一個(gè)函數(shù)組合起來诫龙,然后將這個(gè)組合的結(jié)果發(fā)出來析显。這些源 Observables
中任何一個(gè)發(fā)出一個(gè)元素,他都會(huì)發(fā)出一個(gè)元素(前提是签赃,這些 Observables
曾經(jīng)發(fā)出過元素)谷异。
5.concat
讓兩個(gè)或多個(gè) Observables 按順序串連起來
concat 操作符將多個(gè) Observables
按順序串聯(lián)起來浑侥,當(dāng)前一個(gè) Observable
元素發(fā)送完畢后,后一個(gè) Observable
才可以開始發(fā)出元素晰绎。
concat 將等待前一個(gè) Observable
產(chǎn)生完成事件后寓落,才對(duì)后一個(gè) Observable
進(jìn)行訂閱。如果后一個(gè)是“熱” Observable
荞下,在它前一個(gè) Observable
產(chǎn)生完成事件前伶选,所產(chǎn)生的元素將不會(huì)被發(fā)送出來。
startWith 和它十分相似尖昏。但是startWith不是在后面添加元素仰税,而是在前面插入元素。
merge 和它也是十分相似抽诉。merge并不是將多個(gè) Observables
按順序串聯(lián)起來陨簇,而是將他們合并到一起,不需要 Observables
按先后順序發(fā)出元素迹淌。
6.concatMap
將 Observable 的元素轉(zhuǎn)換成其他的 Observable河绽,然后將這些 Observables 串連起來
concatMap 操作符將源 Observable 的每一個(gè)元素應(yīng)用一個(gè)轉(zhuǎn)換方法,將他們轉(zhuǎn)換成 Observables唉窃。然后讓這些 Observables 按順序的發(fā)出元素耙饰,當(dāng)前一個(gè) Observable 元素發(fā)送完畢后,后一個(gè) Observable 才可以開始發(fā)出元素纹份。等待前一個(gè) Observable 產(chǎn)生完成事件后苟跪,才對(duì)后一個(gè) Observable 進(jìn)行訂閱。
7.connect
ConnectableObservable 和普通的 Observable 十分相似蔓涧,不過在被訂閱后不會(huì)發(fā)出元素件已,直到 connect 操作符被應(yīng)用為止。這樣一來你可以等所有觀察者全部訂閱完成后元暴,才發(fā)出元素篷扩。
8.create
通過一個(gè)構(gòu)建函數(shù)完整的創(chuàng)建一個(gè) Observable
create 操作符將創(chuàng)建一個(gè) Observable
,你需要提供一個(gè)構(gòu)建函數(shù)昨寞,在構(gòu)建函數(shù)里面描述事件(next
瞻惋,error
,completed
)的產(chǎn)生過程援岩。
通常情況下一個(gè)有限的序列歼狼,只會(huì)調(diào)用一次觀察者的 onCompleted
或者 onError
方法。并且在調(diào)用它們后享怀,不會(huì)再去調(diào)用觀察者的其他方法羽峰。
9.debounce
過濾掉高頻產(chǎn)生的元素
debounce 操作符將發(fā)出這種元素,在 Observable
產(chǎn)生這種元素后,一段時(shí)間內(nèi)沒有新元素產(chǎn)生梅屉。
10.debug
打印所有的訂閱值纱,事件以及銷毀信息
11.deferred
直到訂閱發(fā)生,才創(chuàng)建 Observable坯汤,并且為每位訂閱者創(chuàng)建全新的 Observable
deferred 操作符將等待觀察者訂閱它虐唠,才創(chuàng)建一個(gè) Observable,它會(huì)通過一個(gè)構(gòu)建函數(shù)為每一位訂閱者創(chuàng)建新的 Observable惰聂〗ィ看上去每位訂閱者都是對(duì)同一個(gè) Observable 產(chǎn)生訂閱,實(shí)際上它們都獲得了獨(dú)立的序列搓幌。
在一些情況下杆故,直到訂閱時(shí)才創(chuàng)建 Observable 是可以保證拿到的數(shù)據(jù)都是最新的。
12.delay
將 Observable
的每一個(gè)元素拖延一段時(shí)間后發(fā)出
delay 操作符將修改一個(gè) Observable
溉愁,它會(huì)將 Observable
的所有元素都拖延一段設(shè)定好的時(shí)間处铛, 然后才將它們發(fā)送出來。
13.delaySubscription
進(jìn)行延時(shí)訂閱delaySubscription 操作符將在經(jīng)過所設(shè)定的時(shí)間后拐揭,才對(duì) Observable
進(jìn)行訂閱操作撤蟆。
14.dematerialize
dematerialize 操作符將 materialize 轉(zhuǎn)換后的元素還原
15.distinctUntilChanged
阻止 Observable 發(fā)出相同的元素
16.do
當(dāng) Observable 產(chǎn)生某些事件時(shí),執(zhí)行某個(gè)操作
當(dāng) Observable 的某些事件產(chǎn)生時(shí)投队,你可以使用 do 操作符來注冊(cè)一些回調(diào)操作枫疆。這些回調(diào)會(huì)被單獨(dú)調(diào)用,它們會(huì)和 Observable 原本的回調(diào)分離敷鸦。
17.elementAt
只發(fā)出 Observable
中的第 n 個(gè)元素
elementAt 操作符將拉取 Observable
序列中指定索引數(shù)的元素,然后將它作為唯一的元素發(fā)出寝贡。
18.empty
創(chuàng)建一個(gè)空 Observable
19.error
創(chuàng)建一個(gè)只有 error 事件的 Observable
20.filter
僅僅發(fā)出 Observable
中通過判定的元素
filter 操作符將通過你提供的判定方法過濾一個(gè) Observable
扒披。
21.flatMap
將 Observable
的元素轉(zhuǎn)換成其他的 Observable
,然后將這些 Observables
合并
flatMap 操作符將源 Observable
的每一個(gè)元素應(yīng)用一個(gè)轉(zhuǎn)換方法圃泡,將他們轉(zhuǎn)換成 Observables
碟案。 然后將這些 Observables
的元素合并之后再發(fā)送出來。
這個(gè)操作符是非常有用的颇蜡,例如价说,當(dāng) Observable
的元素本身擁有其他的 Observable
時(shí),你可以將所有子 Observables
的元素發(fā)送出來风秤。
22. flatMapLatest
將 Observable
的元素轉(zhuǎn)換成其他的 Observable
鳖目,然后取這些 Observables
中最新的一個(gè)
flatMapLatest 操作符將源 Observable
的每一個(gè)元素應(yīng)用一個(gè)轉(zhuǎn)換方法,將他們轉(zhuǎn)換成 Observables
缤弦。一旦轉(zhuǎn)換出一個(gè)新的 Observable
领迈,就只發(fā)出它的元素,舊的 Observables
的元素將被忽略掉。
23.from
將其他類型或者數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為 Observable
當(dāng)你在使用 Observable
時(shí)狸捅,如果能夠直接將其他類型轉(zhuǎn)換為 Observable
衷蜓,這將是非常省事的。from 操作符就提供了這種功能尘喝。
24.groupBy
將源 Observable
分解為多個(gè)子 Observable
磁浇,并且每個(gè)子 Observable
將源 Observable
中“相似”的元素發(fā)送出來
groupBy 操作符將源 Observable
分解為多個(gè)子 Observable
,然后將這些子 Observable
發(fā)送出來朽褪。
它會(huì)將元素通過某個(gè)鍵進(jìn)行分組扯夭,然后將分組后的元素序列以 Observable
的形態(tài)發(fā)送出來。
25.interval
創(chuàng)建一個(gè) Observable 每隔一段時(shí)間鞍匾,發(fā)出一個(gè)索引數(shù)
26.ignoreElements
忽略掉所有的元素交洗,只發(fā)出 error 或 completed 事件
27.just
創(chuàng)建 Observable 發(fā)出唯一的一個(gè)元素
28.map
通過一個(gè)轉(zhuǎn)換函數(shù),將 Observable
的每個(gè)元素轉(zhuǎn)換一遍
map 操作符將源 Observable
的每個(gè)元素應(yīng)用你提供的轉(zhuǎn)換方法橡淑,然后返回含有轉(zhuǎn)換結(jié)果的 Observable
构拳。
29.merge
將多個(gè) Observables
合并成一個(gè)
通過使用 merge 操作符你可以將多個(gè) Observables
合并成一個(gè),當(dāng)某一個(gè) Observable
發(fā)出一個(gè)元素時(shí)梁棠,他就將這個(gè)元素發(fā)出置森。
如果,某一個(gè) Observable
發(fā)出一個(gè) onError
事件符糊,那么被合并的 Observable
也會(huì)將它發(fā)出凫海,并且立即終止序列。
30. materialize
將序列產(chǎn)生的事件男娄,轉(zhuǎn)換成元素
通常行贪,一個(gè)有限的 Observable
將產(chǎn)生零個(gè)或者多個(gè) onNext
事件,然后產(chǎn)生一個(gè) onCompleted
或者 onError
事件模闲。
materialize 操作符將 Observable
產(chǎn)生的這些事件全部轉(zhuǎn)換成元素建瘫,然后發(fā)送出來。
31.never
創(chuàng)建一個(gè)永遠(yuǎn)不會(huì)發(fā)出元素的 Observable
32.observeOn
指定 Observable
在那個(gè) Scheduler
發(fā)出通知
ReactiveX 使用 Scheduler 來讓 Observable
支持多線程尸折。你可以使用 observeOn 操作符啰脚,來指示 Observable
在哪個(gè) Scheduler 發(fā)出通知。
注意??:一旦產(chǎn)生了 onError
事件实夹, observeOn 操作符將立即轉(zhuǎn)發(fā)橄浓。他不會(huì)等待 onError
之前的事件全部被收到。這意味著 onError
事件可能會(huì)跳過一些元素提前發(fā)送出去亮航,如上圖所示荸实。
subscribeOn 操作符非常相似。它指示 Observable
在哪個(gè) Scheduler 發(fā)出執(zhí)行塞赂。
默認(rèn)情況下泪勒,Observable
創(chuàng)建昼蛀,應(yīng)用操作符以及發(fā)出通知都會(huì)在 Subscribe
方法調(diào)用的 Scheduler 執(zhí)行。subscribeOn 操作符將改變這種行為圆存,它會(huì)指定一個(gè)不同的 Scheduler 來讓 Observable
執(zhí)行叼旋,observeOn 操作符將指定一個(gè)不同的 Scheduler 來讓 Observable
通知觀察者。
如上圖所示沦辙,subscribeOn 操作符指定 Observable
在那個(gè) Scheduler 開始執(zhí)行夫植,無論它處于鏈的那個(gè)位置。 另一方面 observeOn 將決定后面的方法在哪個(gè) Scheduler 運(yùn)行油讯。因此详民,你可能會(huì)多次調(diào)用 observeOn 來決定某些操作符在哪個(gè)線程運(yùn)行。
33.publish
將 Observable 轉(zhuǎn)換為可被連接的 Observable
34.reduce
持續(xù)的將 Observable 的每一個(gè)元素應(yīng)用一個(gè)函數(shù)陌兑,然后發(fā)出最終結(jié)果
35.refCount
將可被連接的 Observable 轉(zhuǎn)換為普通 Observable
36.repeatElement
創(chuàng)建 Observable 重復(fù)的發(fā)出某個(gè)元素
37.replay
確保觀察者接收到同樣的序列沈跨,即使是在 Observable 發(fā)出元素后才訂閱
38.retry
如果源 Observable 產(chǎn)生一個(gè)錯(cuò)誤事件,重新對(duì)它進(jìn)行訂閱兔综,希望它不會(huì)再次產(chǎn)生錯(cuò)誤
39.sample
不定期的對(duì) Observable 取樣
40.scan
持續(xù)的將 Observable 的每一個(gè)元素應(yīng)用一個(gè)函數(shù)饿凛,然后發(fā)出每一次函數(shù)返回的結(jié)果
41.shareReplay
使觀察者共享 Observable,觀察者會(huì)立即收到最新的元素软驰,即使這些元素是在訂閱前產(chǎn)生的
42.single
限制 Observable 只有一個(gè)元素涧窒,否出發(fā)出一個(gè) error 事件
43.skipUntil
跳過 Observable 中頭幾個(gè)元素,直到另一個(gè) Observable 發(fā)出一個(gè)元素
44.skipWhile
跳過 Observable 中頭幾個(gè)元素锭亏,直到元素的判定為否
45.startWith
將一些元素插入到序列的頭部#46.
47. subscribeOn
指定 Observable
在那個(gè) Scheduler
執(zhí)行
ReactiveX 使用 Scheduler 來讓 Observable
支持多線程纠吴。你可以使用 subscribeOn 操作符,來指示 Observable
在哪個(gè) Scheduler 執(zhí)行慧瘤。
observeOn 操作符非常相似戴已。它指示 Observable
在哪個(gè) Scheduler 發(fā)出通知。
默認(rèn)情況下碑隆,Observable
創(chuàng)建恭陡,應(yīng)用操作符以及發(fā)出通知都會(huì)在 Subscribe
方法調(diào)用的 Scheduler 執(zhí)行。subscribeOn 操作符將改變這種行為上煤,它會(huì)指定一個(gè)不同的 Scheduler 來讓 Observable
執(zhí)行,observeOn 操作符將指定一個(gè)不同的 Scheduler 來讓 Observable
通知觀察者著淆。
如上圖所示劫狠,subscribeOn 操作符指定 Observable
在那個(gè) Scheduler 開始執(zhí)行,無論它處于鏈的那個(gè)位置永部。 另一方面 observeOn 將決定后面的方法在哪個(gè) Scheduler 運(yùn)行独泞。因此,你可能會(huì)多次調(diào)用 observeOn 來決定某些操作符在哪個(gè)線程運(yùn)行苔埋。
48.take
僅僅從 Observable 中發(fā)出頭 n 個(gè)元素
49.takeLast
僅僅從 Observable 中發(fā)出尾部 n 個(gè)元素
50.takeUntil
忽略掉在第二個(gè) Observable 產(chǎn)生事件后發(fā)出的那部分元素
takeUntil 操作符將鏡像源 Observable懦砂,它同時(shí)觀測(cè)第二個(gè) Observable。一旦第二個(gè) Observable 發(fā)出一個(gè)元素或者產(chǎn)生一個(gè)終止事件,那個(gè)鏡像的 Observable 將立即終止荞膘。
51.takeWhile
鏡像一個(gè) Observable
直到某個(gè)元素的判定為 false
takeWhile 操作符將鏡像源 Observable
直到某個(gè)元素的判定為 false罚随。此時(shí),這個(gè)鏡像的 Observable
將立即終止羽资。
52.timeout
如果源 Observable
在規(guī)定時(shí)間內(nèi)沒有發(fā)出任何元素淘菩,就產(chǎn)生一個(gè)超時(shí)的 error
事件
如果 Observable
在一段時(shí)間內(nèi)沒有產(chǎn)生元素,timeout 操作符將使它發(fā)出一個(gè) error
事件屠升。
53.timer
創(chuàng)建一個(gè) Observable
在一段延時(shí)后潮改,產(chǎn)生唯一的一個(gè)元素
timer 操作符將創(chuàng)建一個(gè) Observable
,它在經(jīng)過設(shè)定的一段時(shí)間后腹暖,產(chǎn)生唯一的一個(gè)元素汇在。
這里存在其他版本的 timer
操作符。
創(chuàng)建一個(gè) Observable 在一段延時(shí)后脏答,每隔一段時(shí)間產(chǎn)生一個(gè)元素
public static func timer(
_ dueTime: RxTimeInterval, // 初始延時(shí)
period: RxTimeInterval?, // 時(shí)間間隔
scheduler: SchedulerType
) -> Observable<E>
54.using
創(chuàng)建一個(gè)可被清除的資源糕殉,它和 Observable 具有相同的壽命
55.window
將 Observable 分解為多個(gè)子 Observable,周期性的將子 Observable 發(fā)出來
56.withLatestFrom
將兩個(gè) Observables 最新的元素通過一個(gè)函數(shù)組合起來以蕴,當(dāng)?shù)谝粋€(gè) Observable 發(fā)出一個(gè)元素糙麦,就將組合后的元素發(fā)送出來
57.zip
通過一個(gè)函數(shù)將多個(gè) Observables 的元素組合起來,然后將每一個(gè)組合的結(jié)果發(fā)出來