//startWith
//该方法会在 Observable 序列开始之前插入一些事件元素。即发出事件消息之前,会先发出这些预先插入的事件消息
Observable.of(1,2,3)
.startWith(0)
.subscribe(onNext:{print($0)})
.disposed(by: disposeBag)
/*
0
1
2
3
*/
print("\n")
//插入多个数据也是可以的
Observable.of(1,2,3)
.startWith(0)
.startWith(-1)
.startWith(-2)
.subscribe(onNext:{print($0)})
.disposed(by: disposeBag)
/*
-2
-1
0
1
2
3
*/ print("\n")
//merge
//该方法可以将多个(两个或两个以上的)Observable 序列合并成一个 Observable 序列。
let ps1 = PublishSubject<Int>()
let ps2 = PublishSubject<Int>()
Observable.of(ps1,ps2)
.merge()
.subscribe(onNext:{print($0)})
.disposed(by: disposeBag)
ps1.onNext(1)
ps2.onNext(10)
ps1.onNext(2)
ps2.onNext(20)
ps1.onNext(3)
ps2.onNext(30)
ps2.onNext(40)
ps2.onNext(50)
ps1.onNext(30)
/*
1
10
2
20
3
30
40
50
30
*/ print("\n")
//zip
//该方法可以将多个(两个或两个以上的)Observable 序列压缩成一个 Observable 序列。
//而且它会等到每个 Observable 事件一一对应地凑齐之后再合并。 let ps3 = PublishSubject<Int>()
let ps4 = PublishSubject<String>()
Observable.zip(ps3, ps4) { (s1, s2) -> String in
return "\(s1)\(s2)"
}.subscribe(onNext:{print($0)}).disposed(by: disposeBag)
ps3.onNext(1)
ps4.onNext("A")
ps3.onNext(2)
ps4.onNext("B")
ps4.onNext("C")
ps4.onNext("D")
ps3.onNext(3)
ps3.onNext(4)
ps3.onNext(5) /*
1A
2B
3C
4D
*/ print("\n")
// combineLatest
// 该方法同样是将多个(两个或两个以上的)Observable 序列元素进行合并。
// 但与 zip 不同的是,每当任意一个 Observable 有新的事件发出时,它会将每个 Observable 序列的最新的一个事件元素进行合并。
let ps5 = PublishSubject<Int>()
let ps6 = PublishSubject<String>()
Observable.combineLatest(ps5, ps6) { (s1, s2) -> String in
return "\(s1)\(s2)"
}.subscribe(onNext:{print($0)}).disposed(by: disposeBag)
ps5.onNext(1)
ps6.onNext("A")
ps5.onNext(2)
ps6.onNext("B")
ps6.onNext("C")
ps6.onNext("D")
ps5.onNext(3)
ps5.onNext(4)
ps5.onNext(5)
/*
1A
2A
2B
2C
2D
3D
4D
5D
*/ print("\n")
//withLatestFrom:
//该方法将两个 Observable 序列合并为一个。每当 self 队列发射一个元素时,便从第二个序列中取出最新的一个值。
let ps7 = PublishSubject<Int>()
let ps8 = PublishSubject<String>()
ps7.withLatestFrom(ps8)
.subscribe(onNext:{print($0)})
.disposed(by: disposeBag)
ps7.onNext(1)
ps8.onNext("A")
ps7.onNext(2)
ps8.onNext("B")
ps8.onNext("C")
ps8.onNext("D")
ps7.onNext(3)
ps7.onNext(4)
ps7.onNext(5)
/*
A
D
D
D
*/ print("\n")
//switchLatest
//switchLatest 有点像其他语言的 switch 方法,可以对事件流进行转换。
//比如本来监听的 subject1,我可以通过更改 variable 里面的 value 更换事件源。变成监听 subject2。
let subject1 = BehaviorSubject(value: "A")
let subject2 = BehaviorSubject(value: "1") let variable = BehaviorRelay(value: subject1) variable.asObservable()
.switchLatest()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag) subject1.onNext("B")
subject1.onNext("C") //改变事件源
variable.accept(subject2)//1
subject1.onNext("D")
subject2.onNext("2") //2 //改变事件源
variable.accept(subject1)//D
subject2.onNext("3")
subject1.onNext("E")//E /*
A
B
C
1
2
D
E
*/

  

RxSwift学习笔记10:startWith/merge/zip/combineLatest/withLatestFrom/switchLatest的更多相关文章

  1. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  2. 《C++ Primer Plus》学习笔记10

    <C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<&l ...

  3. SQL反模式学习笔记10 取整错误

    目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...

  4. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...

  5. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  6. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

  7. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

  8. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  9. mybatis学习笔记(10)-一对一查询

    mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...

随机推荐

  1. ARM 版本

    M  microcontroller 单片机 STM32                                M0 M0+   M3  M4  M7低功耗 A applicatioin 应用 ...

  2. 63(原67).纯 CSS 创作单元素点阵 loader

    原文地址:https://segmentfault.com/a/1190000015444368 感想:CSS又一次让我见识到它的强大之处 --> box-shadow . box-shadow ...

  3. C#设计模式(4)——抽象工厂模式(Abstract Factory)

    简单工厂模式: 简单工厂模式的工厂类随着产品类的增加需要增加额外的代码 工厂方法模式: 工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性 但是在实际应用中,一个工厂不止会创建单 ...

  4. 安装jdk1.9后报 Error:java: 无效的源发行版: 1.9

    现象: intillj IDE 运行main方法 Information:javac 1.8.0_101 was used to compile java sources Error:java: 无效 ...

  5. apache配置报错:Unrecognized LogFormat directive %I

    跟着阿里云调日志教程(https://help.aliyun.com/document_detail/87740.html)时出现报错: AH00526: Syntax error on line . ...

  6. LeetCode OJ 117. Populating Next Right Pointers in Each Node II

    题目 Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode * ...

  7. 微商城分享 包括app分享 微信分享

    <template> <div class="spr"> <img src="../../assets/images/activity/sh ...

  8. 恢复mysql 中root 用户的所有权限

    今天在研究数据库的时候不小心吧root用户的权限全给关了.这就尴尬了. 找了半天的解决方案. 如果你的用grant all 无法设定某个用户的权限可以试试这个方法. 1停止mysql服务器.使用ski ...

  9. Django_models下划线__正反查询,对象正反查询

    1.我们使用models对数据库进行查询的时候,想去拿到结果的时候有时直接使用".字段",有时是'[0].字段',区别就是我们使用的语句返回的到底是一个对象还是列表: obj=mo ...

  10. 利用CSS3实现透明边框和多重边框

    使用background-clip属性实现透明边框 .bordertest { border: 30px solid hsla(0,0%,90%,.5); background: #bbb; back ...