前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxSwift 系列(六) -- Mathematical and Aggregate Operators

RxSwift 系列(六) -- Mathematical and Aggregate Operators

作者头像
Scott_Mr
发布2018-05-16 16:05:08
1.3K1
发布2018-05-16 16:05:08
举报

前言

本篇文章将要学习RxSwift中数学和集合操作符,在RxSwift中包括了:

  • toArray
  • reduce
  • concat

toArray

将一个Observable序列转化为一个数组,并转换为一个新的Observable序列发射,然后结束。

代码语言:javascript
复制
let disposeBag = DisposeBag()
    
Observable.of(1,2,3,4,5).toArray().subscribe(onNext: {print($0)}).disposed(by: disposeBag)

运行结果:

代码语言:javascript
复制
[1, 2, 3, 4, 5]

reduce

使用一个初始值和一个操作符,对Observable序列中的所有元素进行累计操作,并转换成单一事件信号。(PS:和map有的区别就是:map针对单个元素进行操作,reduce针对所有元素累计操作)

代码语言:javascript
复制
let disposeBag = DisposeBag()
    
Observable.of(1,10,100).reduce(1, accumulator: +).subscribe(onNext: {print($0)}).addDisposableTo(disposeBag)

运行结果:

代码语言:javascript
复制
112

concat

将两个Observable序列合并成一个Observable序列,当一个Observable序列中的所有元素成功发射完成之后,才会发射另一个Observable序列中的元素。 在第一个Observable发射完成之前,第二个Observable发射的事件都会被忽略,但会接收第一个Observable发射完成前第二个Observable发射的最后一个事件。 不好理解,举个例子:

代码语言:javascript
复制
let disposeBag = DisposeBag()
    
let subject1 = BehaviorSubject(value: "?")
let subject2 = BehaviorSubject(value: "?")
    
let variable = Variable(subject1)
    
variable.asObservable()
    .concat()
    .subscribe { print($0) }
    .disposed(by: disposeBag)
    
subject1.onNext("?")
subject1.onNext("?")
    
variable.value = subject2
subject2.onNext("I would be ignored")
subject2.onNext("?")
    
subject1.onCompleted()
subject2.onNext("?")

运行结果:

代码语言:javascript
复制
next(?)
next(?)
next(?)
next(?)
next(?)

解释:在subject1发射完成事件之前

代码语言:javascript
复制
variable.value = subject2
subject2.onNext("I would be ignored")
subject2.onNext("?")

subject2发射的这些事件都会被忽略,但是又会接收subject2发射的最后一个事件,因此会打印onnext(?)

致谢

如果发现有错误的地方,欢迎评论,感谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • toArray
  • reduce
  • concat
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档