石不帅_Code

Rx中的那些操作符

[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的定义

    1
    2
    3
    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

to be continued