RxSwift学习笔记10:startWith/merge/zip/combineLatest/withLatestFrom/switchLatest
//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的更多相关文章
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
- 《C++ Primer Plus》学习笔记10
<C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<&l ...
- SQL反模式学习笔记10 取整错误
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...
- golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息
golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
- Hadoop学习笔记(10) ——搭建源码学习环境
Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传
SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...
- mybatis学习笔记(10)-一对一查询
mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...
随机推荐
- 函数内联 inline,__inline,__forceinline
▶ 感谢大佬的总结[http://www.cnblogs.com/xuemaxiongfeng/articles/2464850.html] ● 存储限定符 __inline 与关键字 inline ...
- leetcode56
public class Solution { public IList<Interval> Merge(IList<Interval> intervals) { var le ...
- shell脚本运行java程序jar
在UBuntu上部署项目的时候,我们往往通过一段shell来启动程序,甚至是通过crontab定时任务来定时的调用java程序,但是很奇怪的一个问题就是,比如我写了一个如下的shell脚本: #!/b ...
- js 模拟css3 动画2
<html> <head> <title> javaScript缓动入门 </title> </head> <body> < ...
- JavaScript: DOM Docunment
Meaning: In browser , we exchange data using JavaScript code with user. We should know that most of ...
- Fiddler 抓包工具怎么使用?怎么在Android手机端的APP抓包
https://blog.csdn.net/loner_fang/article/details/83309266 参考这个人的微博上有fiddler主要功能使用的步骤. 序章 Fiddler是一个蛮 ...
- 最小的K个数(python)
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. # -*- coding:utf-8 -*- class So ...
- jsp中<c:if>标签的用法
<c:if test="${(tbl.column1 eq '值') and (tbl.column2 eq 'str')}"> <table>...< ...
- 152. Maximum Product Subarray最大乘积子数组/是否连续
[抄题]: Given an integer array nums, find the contiguous subarray within an array (containing at least ...
- 解决find命令报错: paths must precede expression(转)
原文地址:https://www.cnblogs.com/peter1994/p/7297656.html 在一天早上,想在服务器 /tmp 目录清除一些pdf文件,大概一万多个文件,在执行命令的时候 ...