Rx中的那些操作符

[TOC]

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

Filtering Opertators

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


    Rx中的那些操作符_第1张图片
    ignoreElements.png
  • filter: filter 接受一个作用于每个事件的predicate closure,当 predicate 结果为 true时通过.


    Rx中的那些操作符_第2张图片
    filter.png

Skipping Opertators

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


    Rx中的那些操作符_第3张图片
    skip.png
  • skipWhile 与 skipUntil:
    这两个都是带条件的 skip 操作符,skipWhile 接受一个断言来判断 Skip 哪一个;


    Rx中的那些操作符_第4张图片
    skipWhile.png

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


    Rx中的那些操作符_第5张图片
    skipUntil.png

Taking Opertators

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

Rx中的那些操作符_第6张图片
take.png
Rx中的那些操作符_第7张图片
takeWhile.png
Rx中的那些操作符_第8张图片
takeUntil.png

Transforming Opertators

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


    Rx中的那些操作符_第9张图片
    map.png
  • flatMap: 最开始理解 Swift 的 map和 flatMap 就比较费劲,后来知道 flatMap 的核心就就是: 降维
    先看看 flatMap的定义

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

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

Rx中的那些操作符_第10张图片
flatMap.png

Combining Opertators

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

share 与 shareReplay

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

to be continued

你可能感兴趣的:(Rx中的那些操作符)