美文网首页
Rx中的那些操作符

Rx中的那些操作符

作者: 一铭_ | 来源:发表于2017-07-19 11:11 被阅读91次

    [TOC]

    记录学习 Rx 过程中的各种操作符以ß及用法还有 tips 等等.
    所有弹珠图均来自 RxMarbles App.

    Filtering Opertators

    • ignoreElements: 忽略. next 事件.会接受到结束事件(.completed, .error).


      ignoreElements.png
    • filter: filter 接受一个作用于每个事件的predicate closure,当 predicate 结果为 true时通过.


      filter.png

    Skipping Opertators

    • skip: skip 操作符允许忽略从第一个到输入的number个事件.


      skip.png
    • skipWhile 与 skipUntil:
      这两个都是带条件的 skip 操作符,skipWhile 接受一个断言来判断 Skip 哪一个;


      skipWhile.png

      而 skipUntil不是接受一个静态条件,而且是接受另一个 observable, 它会 skip source Observable 的事件直到收到 trigger Observable 的事件.


      skipUntil.png

    Taking Opertators

    taking 是 skip 的对立面,这样就很好理解了. 直接放弹珠图.

    take.png takeWhile.png takeUntil.png

    Transforming Opertators

    • map: 跟 Swift的map 类似,接受一个闭包然后对每个事件做处理.


      map.png
    • flatMap: 最开始理解 Swift 的 map和 flatMap 就比较费劲,后来知道 flatMap 的核心就就是: 降维
      先看看 flatMap的定义

    public func flatMap<O: ObservableConvertibleType>(selector: (E) throws -> O) -> Observable<O.E> {
        return FlatMap(source: asObservable(), selector: selector)
    }
    

    在 Rx 中,flatMap可以把一个序列转换成一组序列,然后再把这一组序列拍扁成一个序列。拍扁 其实就是降维的意思.

    flatMap.png

    Combining Opertators

    • CombineLatest: combineLatest 操作符用闭包接受每个队列最新的值,然后最新的值合并成一个新值发送出去.
    CombineLatest.png
    • Concat: concat 操作符可以把多个队列合并起来,合并是顺序是按照队列添加的顺序
    Concat.png
    • Merge: merge操作符也是把对个队列合并,但与 concat 不同的是它是按照队列发出事件的时间来合并.
    Merge.png
    • StartWith: startWith 操作符给一个队列给定了一个初始值,这个值的类型必须和队列里面的元素类型相同.
    StartWith.png

    share 与 shareReplay

    如果有多个 observable需要共享同一个事件,就需要用到 share.
    有一个情形,如果一个请求需要多次订阅,但又不想多次请求,那么就需要多个订阅者共享一个订阅者对象.
    share: 如果订阅者降到0,会重置队列重新开始发送
    shareReplay(_): 这里要传一个 bufferSize, 在share的基础上,队列会从最新的值开始重播bufferSize个值。
    详细链接

    to be continued

    相关文章

      网友评论

          本文标题:Rx中的那些操作符

          本文链接:https://www.haomeiwen.com/subject/pwmckxtx.html