RxSwift 系列(六)

前言

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

  • toArray
  • reduce
  • concat

toArray

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

let disposeBag = DisposeBag()

Observable.of(1,2,3,4,5).toArray().subscribe(onNext: {print($0)}).disposed(by: disposeBag)

运行结果:

[1, 2, 3, 4, 5]

reduce

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

let disposeBag = DisposeBag()

Observable.of(1,10,100).reduce(1, accumulator: +).subscribe(onNext: {print($0)}).addDisposableTo(disposeBag)

运行结果:

112

concat

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

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("??")

运行结果:

next(??)
next(??)
next(??)
next(??)
next(??)

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

variable.value = subject2
subject2.onNext("I would be ignored")
subject2.onNext("??")

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

致谢

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

时间: 2024-10-21 02:12:22

RxSwift 系列(六)的相关文章

RxSwift 系列(九)

前言 看完本系列前面几篇之后,估计大家也还是有点懵逼,本系列前八篇也都是参考RxSwift官方文档和一些概念做的解读.上几篇文章概念性的东西有点多,一时也是很难全部记住,大家脑子里面知道有这么个概念就行,用的时候,再来查阅一番,慢慢就掌握了. 本篇主要来深入了解一些RxSwift实战中用到的一些重要知识点,这里面有很多自己的理解,所以不免会有一些错误的地方,还请大家多多交流,如有发现错误的地方,欢迎评论. 概念 Rx系列的核心就是Observable Sequence这个相信大家心中已经有所了解

C语言快速入门系列(六)

C语言快速入门系列(五) C语言指针加强 本节引言: 上一节我们对C语言中的指针进行了初步的了解,学习了指针的定义,与普通变量 一维数组,二维数组,字符串之间的使用!在本节中我们将会学习一些新的知识点, 函数,结构体与共用体,枚举类型以及类型定义符typedef! 本节学习路线图: 本节正文 函数 ps:空函数就是什么都不做的函数,开发过程中不需要马上实现的,先写空函数!简单的空函数:void abc(){   } 结构体 共用体: 代码示例2: 建立一个共用体类型,当输入的时学生类型时,要求输

【C++自我精讲】基础系列六 PIMPL模式

0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implementation)是通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏. 2 PIMPL优点 举例: //x.h class X { public: void Fun(); private: int i; //add int i; }; //c.h #include <x.h> class C { public: void Fun()

RxSwift 系列(三)

RxSwift 系列(三) -- Combination Operators 前言 本篇文章将要学习如何将多个Observables组合成一个Observable.Combination Operators在RxSwift中的实现有五种: startWith merge zip combineLatest switchLatest startWith 在Observable释放元素之前,发射指定的元素序列.更多详情上面这句话是什么意思呢?翻译成大白话就是在发送一个东西之前,我先发送一个我指定的东

iOS流布局UICollectionView系列六——将布局从平面应用到空间

iOS流布局UICollectionView系列六--将布局从平面应用到空间 一.引言 前面,我们将布局由线性的瀑布流布局扩展到了圆环布局,这使我们使用UICollectionView的布局思路大大迈进了一步,这次,我们玩的更加炫一些,想办法将布局应用的空间,你是否还记得,在管理布局的item的具体属性的类UICollectionViewLayoutAttributrs类中,有transform3D这个属性,通过这个属性的设置,我们真的可以在空间的坐标系中进行布局设计.iOS系统的控件中,也并非

Netty4.x中文教程系列(六) 从头开始Bootstrap

Netty4.x中文教程系列(六) 从头开始Bootstrap 其实自从中文教程系列(五)一直不知道自己到底想些什么.加上忙着工作上出现了一些问题.本来想就这么放弃维护了.没想到有朋友和我说百度搜索推荐了我的文章.瞬间有点小激动啊.决定自己要把这个教程系列完善下去.这里诚挚的想支持我的盆友们道歉.真的是让你们失望了.我居然有想放弃的这种丧心病狂的念头.以后绝对不会了. 其实伴随着对Netty的逐步深入学习.感觉自己对netty的了解仍然有所欠缺.加上笔者语文课是美术老师教的.所以..说多了都是泪

Cocos2d-x 系列六之数据操作

一.定时器  在cocos2d-x中, 类似定时器的操作,不需要额外的写Timer,实际上,在Node元素中,已经添加了定时执行的功能: 先来看看在Node中的定义 // ... bool Node::isScheduled(SEL_SCHEDULE selector) { return _scheduler->isScheduled(selector, this); } void Node::scheduleUpdate() { scheduleUpdateWithPriority(0); }

SNIFF(原始套接字系列六)

大家知道,以太网采用广播机制,所有与网络连接的工作站都可以看到网络上传递的数据.通过查看包含在帧中的目标地址,确定是否进行接收或放弃.如果证明数据确实是发给自己的,工作站将会接收数据并传递给高层协议进行处理.但是,如果让网卡置于混杂模式(Promiscuous mode),则网卡不会鉴别帧的MAC地址,而是一律接收. 上图给出了以太网的帧格式,网卡是通过图中的MAC地址进行ID标识的.传说中的网络嗅探(sniffer)就是指让网卡进入混杂模式从而接收正在局域网总线上发送的所有报文.为什么能够嗅探

智能路由器-OpenWRT 系列六 (远程迅雷离线下载)

OpenWRT 系列教程 智能路由器-OpenWRT 系列一 (OpenWRT 刷机) 智能路由器-OpenWRT 系列二 (OpenWRT初始配置) 智能路由器-OpenWRT 系列三 (OpenWRT安装LuCI&网络配置) 智能路由器-OpenWRT 系列四 (挂载移动设备) 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享) 智能路由器-OpenWRT 系列六 (远程迅雷离线下载) 下载 Xware1.0.31,参考地址 http://luyou.xunlei.com/thr