RxSwift 核心-Operator-操作符

2019-12-20  本文已影响0人  态度哥
关键字 作用
变换操作符(Transforming Observables)
buffer 该方法简单来说就是缓存 Observable 中发出的新元素,当元素达到某个数量,或者经过了特定的时间,它就会将这个元素集合发送出来。(作用是缓冲组合,第一个参数是缓冲时间,第二个参数是缓冲个数,第三个参数是线程
window window 操作符和 buffer 十分相似。不过 buffer 是周期性的将缓存的元素集合发送出来,而 window 周期性的将元素集合以 Observable 的形态发送出来。同时 buffer 要等到元素搜集完毕后,才会发出元素序列。而 window 可以实时发出元素序列。
map 该操作符通过传入一个函数闭包把原来的 Observable 序列转变为一个新的 Observable 序列。
flatMap * map 在做转换的时候容易出现“升维”的情况。即转变之后,从一个序列变成了一个序列的序列。 * 而 flatMap 操作符会对源 Observable 的每一个元素应用一个转换方法,将他们转换成 Observables。 然后将这些 Observables 的元素合并之后再发送出来。即又将其 "拍扁"(降维)成一个 Observable 序列 . * 这个操作符是非常有用的。比如当 Observable 的元素本生拥有其他的 Observable 时,我们可以将所有子 Observables 的元素发送出来。
flatMapLatest flatMapLatest 与 flatMap 的唯一区别是:flatMapLatest 只会接收最新的 value 事件。
flatMapFirst flatMapFirst 与 flatMapLatest 正好相反:flatMapFirst 只会接收最初的 value 事件。
concatMap concatMap 与 flatMap 的唯一区别是:当前一个 Observable 元素发送完毕后,后一个Observable 才可以开始发出元素。或者说等待前一个 Observable 产生完成事件后,才对后一个 Observable 进行订阅。
scan scan 就是先给一个初始化的数,然后不断的拿前一个结果和最新的值进行处理操作。
groupBy groupBy 操作符将源 Observable 分解为多个子 Observable,然后将这些子 Observable 发送出来。也就是说该操作符会将元素通过某个键进行分组,然后将分组后的元素序列以 Observable 的形态发送出来。
过滤操作符(Filtering Observables)
filter 该操作符就是用来过滤掉某些不符合要求的事件。
distinctUntilChanged 该操作符用于过滤掉连续重复的事件。
single * 限制只发送一次事件,或者满足条件的第一个事件。 * 如果存在有多个事件或者没有事件都会发出一个 error 事件。 * 如果只有一个事件,则不会发出 error 事件。
elementAt 该方法实现只处理在指定位置的事件。
ignoreElements * 该操作符可以忽略掉所有的元素,只发出 error 或 completed 事件。 * 如果我们并不关心 Observable 的任何元素,只想知道 Observable 在什么时候终止,那就可以使用 ignoreElements 操作符。
take 该方法实现仅发送 Observable 序列中的前 n 个事件,在满足数量之后会自动 .completed。
takeLast 该方法实现仅发送 Observable 序列中的后 n 个事件。
skip 该方法用于跳过源 Observable 序列发出的前 n 个事件。
sample * Sample 除了订阅源 Observable 外,还可以监视另外一个 Observable, 即 notifier 。 * 每当收到 notifier 事件,就会从源序列取一个最新的事件并发送。而如果两次 notifier 事件之间没有源序列的事件,则不发送值。
debounce * debounce 操作符可以用来过滤掉高频产生的元素,它只会发出这种元素:该元素产生后,一段时间内没有新元素产生。 * 换句话说就是,队列中的元素如果和下一个元素的间隔小于了指定的时间间隔,那么这个元素将被过滤掉。 * debounce 常用在用户输入的时候,不需要每个字母敲进去都发送一个事件,而是稍等一下取最后一个事件。
条件和布尔操作符(Conditional and Boolean Operators)
amb 当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素。并忽略掉其他的 Observables。
takeWhile 该方法依次判断 Observable 序列的每一个值是否满足给定的条件。 当第一个不满足条件的值出现时,它便自动完成。
takeUntil * 除了订阅源 Observable 外,通过 takeUntil 方法我们还可以监视另外一个 Observable, 即 notifier。 * 如果 notifier 发出值或 complete 通知,那么源 Observable 便自动完成,停止发送事件。
skipWhile * 该方法用于跳过前面所有满足条件的事件。 * 一旦遇到不满足条件的事件,之后就不会再跳过了。
skipUntil * 同上面的 takeUntil 一样,skipUntil 除了订阅源 Observable 外,通过 skipUntil 方法我们还可以监视另外一个 Observable, 即 notifier 。 * 与 takeUntil 相反的是。源 Observable 序列事件默认会一直跳过,直到 notifier 发出值或 complete 通知。
结合操作(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。
算数、以及聚合操作(Mathematical and Aggregate Operators)
toArray 该操作符先把一个序列转成一个数组,并作为一个单一的事件发送,然后结束。
reduce * reduce 接受一个初始值,和一个操作符号。* reduce 将给定的初始值,与序列里的每个值进行累计运算。得到一个最终结果,并将其作为单个值发送出去。
concat * concat 会把多个 Observable 序列合并(串联)为一个 Observable 序列。 * 并且只有当前面一个 Observable 序列发出了 completed 事件,才会开始发送下一个 Observable 序列事件。
连接操作(Connectable Observable Operators)
publish publish 方法会将一个正常的序列转换成一个可连接的序列。同时该序列不会立刻发送事件,只有在调用 connect 之后才会开始
replay * replay 同上面的 publish 方法相同之处在于:会将将一个正常的序列转换成一个可连接的序列。同时该序列不会立刻发送事件,只有在调用 connect 之后才会开始。 * replay 与 publish 不同在于:新的订阅者还能接收到订阅之前的事件消息(数量由设置的 bufferSize 决定)。
multicast * multicast 方法同样是将一个正常的序列转换成一个可连接的序列。 * 同时 multicast 方法还可以传入一个 Subject,每当序列发送事件时都会触发这个 Subject 的发送。
refCount * refCount 操作符可以将可被连接的 Observable 转换为普通 Observable * 即该操作符可以自动连接和断开可连接的 Observable。当第一个观察者对可连接的 Observable 订阅时,那么底层的 Observable 将被自动连接。当最后一个观察者离开时,那么底层的 Observable 将被自动断开连接。
share(relay:) * 该操作符将使得观察者共享源 Observable,并且缓存最新的 n 个元素,将这些元素直接发送给新的观察者。* 简单来说 shareReplay 就是 replay 和 refCount 的组合。
其他一些实用的操作符(Observable Utility Operators)
delay 该操作符会将 Observable 的所有元素都先拖延一段设定好的时间,然后才将它们发送出来。
delaySubscription 使用该操作符可以进行延时订阅。即经过所设定的时间后,才对 Observable 进行订阅操作。
materialize * 该操作符可以将序列产生的事件,转换成元素。 * 通常一个有限的 Observable 将产生零个或者多个 onNext 事件,最后产生一个 onCompleted 或者 onError 事件。而 materialize 操作符会将 Observable 产生的这些事件全部转换成元素,然后发送出来。
dematerialize 该操作符的作用和 materialize 正好相反,它可以将 materialize 转换后的元素还原。
timeout 使用该操作符可以设置一个超时时间。如果源 Observable 在规定时间内没有发任何出元素,就产生一个超时的 error 事件。
using 使用 using 操作符创建 Observable 时,同时会创建一个可被清除的资源,一旦 Observable 终止了,那么这个资源就会被清除掉了。

如何选择操作符?

上一篇下一篇

猜你喜欢

热点阅读