RxSwift 操作符

1.Amb

在多个源 Observables 中, 取第一个发出元素或产生事件的Observable ,然后只发出它的元素
当你传入多个 Observables 到 amb 操作符时,它将取其中一个 Observable:第一个产生事件的那个 Observable,可以是一个 next,error 或者 completed 事件。 amb 将忽略掉其他的 Observables。

2.buffer

缓存元素,然后将缓存的元素集合,周期性的发出来
buffer 操作符将缓存 Observable 中发出的新元素,当元素达到某个数量,或者经过了特定的时间,它就会将这个元素集合发送出来。

3.catchError、catchErrorJustReturn

catchError 操作符将会拦截一个 error 事件,将它替换成其他的元素或者一组元素,然后传递给观察者。这样可以使得 Observable 正常结束,或者根本都不需要结束。
catchErrorJustReturn 操作符会将error 事件替换成其他的一个元素,然后结束该序列。

4.combineLatest

当多个 Observables 中任何一个发出一个元素,就发出一个元素。这个元素是由这些 Observables 中最新的元素,通过一个函数组合起来的

image

combineLatest 操作符将多个 Observables 中最新的元素通过一个函数组合起来,然后将这个组合的结果发出来。这些源 Observables 中任何一个发出一个元素,他都会发出一个元素(前提是,这些 Observables 曾经发出过元素)。

5.concat

让两个或多个 Observables 按顺序串连起来
concat 操作符将多个 Observables 按顺序串联起来,当前一个 Observable 元素发送完毕后,后一个 Observable 才可以开始发出元素。

concat 将等待前一个 Observable 产生完成事件后,才对后一个 Observable 进行订阅。如果后一个是“热” Observable ,在它前一个 Observable 产生完成事件前,所产生的元素将不会被发送出来。

startWith 和它十分相似。但是startWith不是在后面添加元素,而是在前面插入元素。

merge 和它也是十分相似。merge并不是将多个 Observables 按顺序串联起来,而是将他们合并到一起,不需要 Observables 按先后顺序发出元素。

6.concatMap

将 Observable 的元素转换成其他的 Observable,然后将这些 Observables 串连起来
concatMap 操作符将源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。然后让这些 Observables 按顺序的发出元素,当前一个 Observable 元素发送完毕后,后一个 Observable 才可以开始发出元素。等待前一个 Observable 产生完成事件后,才对后一个 Observable 进行订阅。

7.connect

ConnectableObservable 和普通的 Observable 十分相似,不过在被订阅后不会发出元素,直到 connect 操作符被应用为止。这样一来你可以等所有观察者全部订阅完成后,才发出元素。

8.create

通过一个构建函数完整的创建一个 Observable

image

create 操作符将创建一个 Observable,你需要提供一个构建函数,在构建函数里面描述事件(nexterrorcompleted)的产生过程。

通常情况下一个有限的序列,只会调用一次观察者onCompleted 或者 onError 方法。并且在调用它们后,不会再去调用观察者的其他方法。

9.debounce

过滤掉高频产生的元素


image

debounce 操作符将发出这种元素,在 Observable 产生这种元素后,一段时间内没有新元素产生。

10.debug

打印所有的订阅,事件以及销毁信息

11.deferred

直到订阅发生,才创建 Observable,并且为每位订阅者创建全新的 Observable
deferred 操作符将等待观察者订阅它,才创建一个 Observable,它会通过一个构建函数为每一位订阅者创建新的 Observable。看上去每位订阅者都是对同一个 Observable 产生订阅,实际上它们都获得了独立的序列。

在一些情况下,直到订阅时才创建 Observable 是可以保证拿到的数据都是最新的。

12.delay

Observable 的每一个元素拖延一段时间后发出

delay 操作符将修改一个 Observable,它会将 Observable 的所有元素都拖延一段设定好的时间, 然后才将它们发送出来。

13.delaySubscription

进行延时订阅delaySubscription 操作符将在经过所设定的时间后,才对 Observable 进行订阅操作。

14.dematerialize

dematerialize 操作符将 materialize 转换后的元素还原

15.distinctUntilChanged

阻止 Observable 发出相同的元素

16.do

当 Observable 产生某些事件时,执行某个操作
当 Observable 的某些事件产生时,你可以使用 do 操作符来注册一些回调操作。这些回调会被单独调用,它们会和 Observable 原本的回调分离。

17.elementAt

只发出 Observable 中的第 n 个元素

image

elementAt 操作符将拉取 Observable 序列中指定索引数的元素,然后将它作为唯一的元素发出。

18.empty

创建一个空 Observable

19.error

创建一个只有 error 事件的 Observable

20.filter

仅仅发出 Observable 中通过判定的元素

image

filter 操作符将通过你提供的判定方法过滤一个 Observable

21.flatMap

Observable 的元素转换成其他的 Observable,然后将这些 Observables 合并

image

flatMap 操作符将源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。 然后将这些 Observables 的元素合并之后再发送出来。

这个操作符是非常有用的,例如,当 Observable 的元素本身拥有其他的 Observable 时,你可以将所有 Observables 的元素发送出来。

22. flatMapLatest

Observable 的元素转换成其他的 Observable,然后取这些 Observables 中最新的一个

image

flatMapLatest 操作符将源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。一旦转换出一个新的 Observable,就只发出它的元素,旧的 Observables 的元素将被忽略掉。

23.from

将其他类型或者数据结构转换为 Observable

image

当你在使用 Observable 时,如果能够直接将其他类型转换为 Observable,这将是非常省事的。from 操作符就提供了这种功能。

24.groupBy

将源 Observable 分解为多个子 Observable,并且每个子 Observable 将源 Observable 中“相似”的元素发送出来

image

groupBy 操作符将源 Observable 分解为多个子 Observable,然后将这些子 Observable 发送出来。

它会将元素通过某个键进行分组,然后将分组后的元素序列以 Observable 的形态发送出来。

25.interval

创建一个 Observable 每隔一段时间,发出一个索引数

26.ignoreElements

忽略掉所有的元素,只发出 error 或 completed 事件

27.just

创建 Observable 发出唯一的一个元素

28.map

通过一个转换函数,将 Observable 的每个元素转换一遍

image

map 操作符将源 Observable 的每个元素应用你提供的转换方法,然后返回含有转换结果的 Observable

29.merge

将多个 Observables 合并成一个

image

通过使用 merge 操作符你可以将多个 Observables 合并成一个,当某一个 Observable 发出一个元素时,他就将这个元素发出。

如果,某一个 Observable 发出一个 onError 事件,那么被合并的 Observable 也会将它发出,并且立即终止序列。

30. materialize

将序列产生的事件,转换成元素

image

通常,一个有限的 Observable 将产生零个或者多个 onNext 事件,然后产生一个 onCompleted 或者 onError 事件。

materialize 操作符将 Observable 产生的这些事件全部转换成元素,然后发送出来。

31.never

创建一个永远不会发出元素的 Observable

32.observeOn

指定 Observable 在那个 Scheduler 发出通知

image

ReactiveX 使用 Scheduler 来让 Observable 支持多线程。你可以使用 observeOn 操作符,来指示 Observable 在哪个 Scheduler 发出通知。

image

注意⚠️:一旦产生了 onError 事件, observeOn 操作符将立即转发。他不会等待 onError 之前的事件全部被收到。这意味着 onError 事件可能会跳过一些元素提前发送出去,如上图所示。

image

subscribeOn 操作符非常相似。它指示 Observable 在哪个 Scheduler 发出执行。

默认情况下,Observable 创建,应用操作符以及发出通知都会在 Subscribe 方法调用的 Scheduler 执行。subscribeOn 操作符将改变这种行为,它会指定一个不同的 Scheduler 来让 Observable 执行,observeOn 操作符将指定一个不同的 Scheduler 来让 Observable 通知观察者。

如上图所示,subscribeOn 操作符指定 Observable 在那个 Scheduler 开始执行,无论它处于链的那个位置。 另一方面 observeOn 将决定后面的方法在哪个 Scheduler 运行。因此,你可能会多次调用 observeOn 来决定某些操作符在哪个线程运行。

33.publish

将 Observable 转换为可被连接的 Observable

34.reduce

持续的将 Observable 的每一个元素应用一个函数,然后发出最终结果

35.refCount

将可被连接的 Observable 转换为普通 Observable

36.repeatElement

创建 Observable 重复的发出某个元素

37.replay

确保观察者接收到同样的序列,即使是在 Observable 发出元素后才订阅

38.retry

如果源 Observable 产生一个错误事件,重新对它进行订阅,希望它不会再次产生错误

39.sample

不定期的对 Observable 取样

40.scan

持续的将 Observable 的每一个元素应用一个函数,然后发出每一次函数返回的结果

41.shareReplay

使观察者共享 Observable,观察者会立即收到最新的元素,即使这些元素是在订阅前产生的

42.single

限制 Observable 只有一个元素,否出发出一个 error 事件

43.skipUntil

跳过 Observable 中头几个元素,直到另一个 Observable 发出一个元素

44.skipWhile

跳过 Observable 中头几个元素,直到元素的判定为否

45.startWith

将一些元素插入到序列的头部#46.

47. subscribeOn

指定 Observable 在那个 Scheduler 执行

image

ReactiveX 使用 Scheduler 来让 Observable 支持多线程。你可以使用 subscribeOn 操作符,来指示 Observable 在哪个 Scheduler 执行。

observeOn 操作符非常相似。它指示 Observable 在哪个 Scheduler 发出通知。

image

默认情况下,Observable 创建,应用操作符以及发出通知都会在 Subscribe 方法调用的 Scheduler 执行。subscribeOn 操作符将改变这种行为,它会指定一个不同的 Scheduler 来让 Observable 执行,observeOn 操作符将指定一个不同的 Scheduler 来让 Observable 通知观察者。

如上图所示,subscribeOn 操作符指定 Observable 在那个 Scheduler 开始执行,无论它处于链的那个位置。 另一方面 observeOn 将决定后面的方法在哪个 Scheduler 运行。因此,你可能会多次调用 observeOn 来决定某些操作符在哪个线程运行。

48.take

仅仅从 Observable 中发出头 n 个元素

49.takeLast

仅仅从 Observable 中发出尾部 n 个元素

50.takeUntil

忽略掉在第二个 Observable 产生事件后发出的那部分元素
takeUntil 操作符将镜像源 Observable,它同时观测第二个 Observable。一旦第二个 Observable 发出一个元素或者产生一个终止事件,那个镜像的 Observable 将立即终止。

51.takeWhile

镜像一个 Observable 直到某个元素的判定为 false

image

takeWhile 操作符将镜像源 Observable 直到某个元素的判定为 false。此时,这个镜像的 Observable 将立即终止。

52.timeout

如果源 Observable 在规定时间内没有发出任何元素,就产生一个超时的 error 事件

image

如果 Observable 在一段时间内没有产生元素,timeout 操作符将使它发出一个 error 事件。

53.timer

创建一个 Observable 在一段延时后,产生唯一的一个元素

image

timer 操作符将创建一个 Observable,它在经过设定的一段时间后,产生唯一的一个元素。

这里存在其他版本的 timer 操作符。
创建一个 Observable 在一段延时后,每隔一段时间产生一个元素

public static func timer(
_ dueTime: RxTimeInterval, // 初始延时
period: RxTimeInterval?, // 时间间隔
scheduler: SchedulerType
) -> Observable<E>

54.using

创建一个可被清除的资源,它和 Observable 具有相同的寿命

55.window

将 Observable 分解为多个子 Observable,周期性的将子 Observable 发出来

56.withLatestFrom

将两个 Observables 最新的元素通过一个函数组合起来,当第一个 Observable 发出一个元素,就将组合后的元素发送出来

57.zip

通过一个函数将多个 Observables 的元素组合起来,然后将每一个组合的结果发出来

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 之前列举了很多操作符的用法,还有很多我们没有列举的。其实写了那么多操作符有时候我还是会忘记选择哪一个。这个时候,我...
    darrenW阅读 693评论 0 0
  • 本文没有记录RxSwift操作符的基本介绍和用法,具体介绍在网上有很多,当然最好就是查看官方Demo了,还有一个不...
    Seacen_Liu阅读 316评论 0 0
  • Subject创建订阅Source PublishSubject 最普通的subject,对它订阅的订阅者只会收到...
    给伤的你我依然喜欢阅读 1,098评论 0 1
  • 基本概念: Observable<T> (可观察序列):异步地产生一系列Event(事件)即:event(elem...
    指尖_跳舞阅读 1,662评论 0 1
  • 目的 了解 ReactiveX 是什么? 了解 ReactiveX 优劣势? ReactiveX 中常用的概念? ...
    yuGodddddd阅读 4,032评论 0 4