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 终止了,那么这个资源就会被清除掉了。 |