RxSwift 操作符

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ù)組合起來的

image

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

image

create 操作符將創(chuàng)建一個(gè) Observable,你需要提供一個(gè)構(gòu)建函數(shù)昨寞,在構(gòu)建函數(shù)里面描述事件(next瞻惋,errorcompleted)的產(chǎn)生過程援岩。

通常情況下一個(gè)有限的序列歼狼,只會(huì)調(diào)用一次觀察者onCompleted 或者 onError 方法。并且在調(diào)用它們后享怀,不會(huì)再去調(diào)用觀察者的其他方法羽峰。

9.debounce

過濾掉高頻產(chǎn)生的元素


image

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è)元素

image

elementAt 操作符將拉取 Observable 序列中指定索引數(shù)的元素,然后將它作為唯一的元素發(fā)出寝贡。

18.empty

創(chuàng)建一個(gè)空 Observable

19.error

創(chuàng)建一個(gè)只有 error 事件的 Observable

20.filter

僅僅發(fā)出 Observable 中通過判定的元素

image

filter 操作符將通過你提供的判定方法過濾一個(gè) Observable扒披。

21.flatMap

Observable 的元素轉(zhuǎn)換成其他的 Observable,然后將這些 Observables 合并

image

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è)

image

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

image

當(dāng)你在使用 Observable 時(shí)狸捅,如果能夠直接將其他類型轉(zhuǎn)換為 Observable衷蜓,這將是非常省事的。from 操作符就提供了這種功能尘喝。

24.groupBy

將源 Observable 分解為多個(gè)子 Observable磁浇,并且每個(gè)子 Observable 將源 Observable 中“相似”的元素發(fā)送出來

image

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)換一遍

image

map 操作符將源 Observable 的每個(gè)元素應(yīng)用你提供的轉(zhuǎn)換方法橡淑,然后返回含有轉(zhuǎn)換結(jié)果的 Observable构拳。

29.merge

將多個(gè) Observables 合并成一個(gè)

image

通過使用 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)換成元素

image

通常行贪,一個(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ā)出通知

image

ReactiveX 使用 Scheduler 來讓 Observable 支持多線程尸折。你可以使用 observeOn 操作符啰脚,來指示 Observable 在哪個(gè) Scheduler 發(fā)出通知。

image

注意??:一旦產(chǎn)生了 onError 事件实夹, observeOn 操作符將立即轉(zhuǎn)發(fā)橄浓。他不會(huì)等待 onError 之前的事件全部被收到。這意味著 onError 事件可能會(huì)跳過一些元素提前發(fā)送出去亮航,如上圖所示荸实。

image

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í)行

image

ReactiveX 使用 Scheduler 來讓 Observable 支持多線程纠吴。你可以使用 subscribeOn 操作符,來指示 Observable 在哪個(gè) Scheduler 執(zhí)行慧瘤。

observeOn 操作符非常相似戴已。它指示 Observable 在哪個(gè) Scheduler 發(fā)出通知。

image

默認(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

image

takeWhile 操作符將鏡像源 Observable 直到某個(gè)元素的判定為 false罚随。此時(shí),這個(gè)鏡像的 Observable 將立即終止羽资。

52.timeout

如果源 Observable 在規(guī)定時(shí)間內(nèi)沒有發(fā)出任何元素淘菩,就產(chǎn)生一個(gè)超時(shí)的 error 事件

image

如果 Observable 在一段時(shí)間內(nèi)沒有產(chǎn)生元素,timeout 操作符將使它發(fā)出一個(gè) error 事件屠升。

53.timer

創(chuàng)建一個(gè) Observable 在一段延時(shí)后潮改,產(chǎn)生唯一的一個(gè)元素

image

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ā)出來

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丛肮,一起剝皮案震驚了整個(gè)濱河市赡磅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宝与,老刑警劉巖焚廊,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異习劫,居然都是意外死亡咆瘟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門诽里,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袒餐,“玉大人,你說我怎么就攤上這事谤狡【难郏” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵墓懂,是天一觀的道長焰宣。 經(jīng)常有香客問我,道長捕仔,這世上最難降的妖魔是什么匕积? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任盈罐,我火速辦了婚禮,結(jié)果婚禮上闪唆,老公的妹妹穿的比我還像新娘盅粪。我一直安慰自己,他們只是感情好苞氮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布湾揽。 她就那樣靜靜地躺著,像睡著了一般笼吟。 火紅的嫁衣襯著肌膚如雪库物。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天贷帮,我揣著相機(jī)與錄音戚揭,去河邊找鬼。 笑死撵枢,一個(gè)胖子當(dāng)著我的面吹牛民晒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锄禽,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼潜必,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了沃但?” 一聲冷哼從身側(cè)響起磁滚,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宵晚,沒想到半個(gè)月后垂攘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淤刃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年晒他,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逸贾。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陨仅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铝侵,到底是詐尸還是另有隱情掂名,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布哟沫,位于F島的核電站,受9級(jí)特大地震影響锌介,放射性物質(zhì)發(fā)生泄漏嗜诀。R本人自食惡果不足惜猾警,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隆敢。 院中可真熱鬧发皿,春花似錦、人聲如沸拂蝎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽温自。三九已至玄货,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悼泌,已是汗流浹背松捉。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留馆里,地道東北人隘世。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像鸠踪,于是被迫代替她去往敵國和親丙者。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 之前列舉了很多操作符的用法营密,還有很多我們沒有列舉的械媒。其實(shí)寫了那么多操作符有時(shí)候我還是會(huì)忘記選擇哪一個(gè)。這個(gè)時(shí)候卵贱,我...
    darrenW閱讀 702評(píng)論 0 0
  • 本文沒有記錄RxSwift操作符的基本介紹和用法滥沫,具體介紹在網(wǎng)上有很多,當(dāng)然最好就是查看官方Demo了键俱,還有一個(gè)不...
    Seacen_Liu閱讀 321評(píng)論 0 0
  • Subject創(chuàng)建訂閱Source PublishSubject 最普通的subject兰绣,對(duì)它訂閱的訂閱者只會(huì)收到...
    給傷的你我依然喜歡閱讀 1,109評(píng)論 0 1
  • 基本概念: Observable<T> (可觀察序列):異步地產(chǎn)生一系列Event(事件)即:event(elem...
    指尖_跳舞閱讀 1,697評(píng)論 0 1
  • 目的 了解 ReactiveX 是什么? 了解 ReactiveX 優(yōu)劣勢(shì)编振? ReactiveX 中常用的概念缀辩? ...
    yuGodddddd閱讀 4,085評(píng)論 0 4