RXSwift_操作符

Subject创建订阅Source

PublishSubject 最普通的subject,对它订阅的订阅者只会收到,后面发的值。如果对一个Complete/error的subject订阅,会马上收到complete/error。

BehaviorSubject  它的订阅者在订阅的时候会收到上一个event( error、complete、next)。创建时候需要一个初始值。

ReplaySubject  创建的时候用creat(buffferSize:Int)设置缓存的大小, 缓存的只缓存next。它的订阅者,在订阅的时候会马上收到缓存的next。如果订阅源是Complete/error,那么还会收到Complete/error。

Variable 是对behaviorSubject的封装。和behaviorSubject一样,创建提供一个初始值,它的订阅者也会马上收到上一个event。

1.不同的是它不需要手动complete(),当Variable销毁的时候系统会自动调用complete。2.放送event不用onNext(),而是通过对其属性value赋值

变换操作符

buffer  方法作用是缓冲组合,第一个参数是缓冲时间,第二个参数是缓冲个数,第三个参数是线程。订阅者收到的是一个数组。如果 缓存时间1S,个数 3。那么每缓冲3个就发出,如果一秒内不足3个也发送,一个都不用就发送[]。

window   window操作符和  buffer十分相似。不过 buffer 是周期性的将缓存的元素集合发送出来,而 window周期性将元素集合以Observable 的形态发送出来。

map  很熟

flatMap flatMap操作符会对Observable的每一个元素转换成Observables,然后这些Observables的元素合并后再发送出来。即又将其“flat”降维成一个Observable序列

flatMapLatest flatMapLatest与 flatMap的唯一区别是:flatMapLatest只会接收最新 value的事件。

concatMap concatMap与  flatMap的唯一区别是:当前一个 observable 元素发送完毕后,后一个observable 才可以开始发出元素。或者说等待前一个  observable产生完成事件后,才对后一个 observable 进行订阅。

scan 就是先给一个初始值,然后不断的拿前一个的结果和最新的值进行处理操作。

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

过滤操作符

filter 去除不满足给定条件的事件

distinctUntilChanged 过滤连续重复的事件

single 限制只发送一次事件,或者满足条件的第一个事件。如果存在有多个事件或者没有事件都发发出一个error事件。如果只有一个事件,则不会发出error事件

elementAt 该方法只处理在指定位置的事件

ignoreElements 忽略所有元素,只发errorcomplete事件

take 执行前几个事件

takeLast 执行后几个事件

Skip 跳过前几个事件

Sample 设置一个notifier。每当收到notifier事件,就从源序列去一个最新的事件并发送。二如果两次notifier事件之间没有源序列的事件,则不发送。

debounce debounce(0.5, scheduler: MainScheduler.instance)//只发送间隔超过0.5的元素。

条件操作符

amb 当传入多个 Observables 到 amb 操作符时,它将取第一个发出元素或产生事件的 Observable,然后只发出它的元素。并忽略掉其他的 Observables

takeWhile 该方法依次判断Observable序列的每一个值是否满足给定的条件。当第一个不满足条件的值出现,它便Complete。

takeUntil 该方法设定另一个Observable,当这个Observable发出值或Complete,那么订阅源自动就完成

skipWhile 当满足给定的条件,就跳过发出的event。直到条件不满足的时候,开始执行,之后不会跳过

skipUntil 一直跳过,直到notifier发出值或Complete

结合操作操作符

startWith 在Observable序列开始之前插入一些事件元素。

merge 将多个Observable 合并成一个Observable,和flatMap{$0}一样

zip  将多个Observable压缩成。如:序列A,B,序列A的第一个值一定要与B的第一个值合并成新元素,一一相对应。这些新元素组成一个新的序列

combineLatest zip的区别:如序列A,B,序列A产生一个新的值,只需和B的当前最新的值合成就行,反之也行,不需要相对应。这些新元素组成一个新的序列。

withLatestFrom    序列AB:A.withLatestFrom(B)....当A发出一个元素,就从B取出一个最新的元素并发送。

switchLatest switchLatest 有点像其他语言的switch方法,可以对事件流进行转换。

比如本来监听的 subject1,我可以通过更改variable  里面的value  更换事件源。变成监听subject2 

flatMapLatest{$0}一样

算数操作

toArray  改操作符先把一个序列转成一个数组,并作为一个单一的事件发送,然后结束

reduce  接受一个初始值,和一个操作符。将给定的初始值,与序列里的每个值进行累计运算。得到一个最终结果,并将其作为单个值发送出去。

concat 会把多个Observavle序列合并(串联)为一个Observable序列。并且只有当前一个Observable序列发出一个completed事件,才会开始发送下一个Observable序列事件。与concatMap{$0}一样

连接操作

publish 将普通的序列转换成一个可连接的序列,同时该序列不会立刻发送事件,只有在调用connect之后才会开始

replay publish不同的:新的订阅者还能收到订阅之前的事件消息(数量由设置的bufferSize决定)

Multicaset 同样是将一个正常的序列转换成一个可连接的序列。同时muticase方法还可以传入一个subject,每当序列发送事件都会触发这个Subject也发送

refCount 将一个可被连接的序列转换成普通的序列。但是也还是会共享一个Observable源。

share(relay:)  是repaly于refCount结合。先用repaly,变成一个带缓存的可连接同步序列,再用refCount,变成一个普通带缓存的同步序列。同步的意思就是 -> 使得观察者共享源Observable

其他操作符

delay 使Observable延迟发送

delaySubscriptioin Observable延迟订阅

materialize  将一个Observable产生的event转换成元素,然后发送出去

dematerialize materialize相反

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

using  使用 using 操作符创建 Observable 时,同时会创建一个可被清除的资源,一旦 Observable终止了,那么这个资源就会被清除掉了。

例子使用了do(onNext....)给序列添加订阅者的操作返回的但是序列,如果对这个序列订阅,只需Subscript()返回Disposable,就能执行do里面设置的操作。

  Observable.using({() -> AnyDisposable in

     return AnyDisposable(infiniteInterval$.subscribe()) //资源必须要用个遵守Disposable的class包裹

        }) { (_) ->Observable in

            return  limited$ //返回一个序列

        }.subscribe()

Swift - RxSwift的使用详解15(错误处理)

特征序列

Single 发送一个error,或者一个元素,应用场景网络请求

completable 发送一个error,或者是一个complete,应用场景本地存储

Maybe 发送一个error,或元素,或complete。

你可能感兴趣的:(RXSwift_操作符)