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实 ...
随机推荐
- ROS--导航、路径规划和SLAM
一.用move_base导航走正方形 1. roscore 2.执行 roslaunch rbx1_bringup fake_turtlebot.launch 然后 roslaunch rbx1_na ...
- 【机器学习_7】numpy
1. 定义 入门选手不抄作业了,先简单理解下,numpy最大的应用大概是方便做数学运算啥的,功劳在于一个叫ndarray(多维数组)的数据类型.numpy本身没有强大分析能力,只是pandas的基础啥 ...
- 让UITableView的section header view不悬停的方法
当 UITableView 的 style 属性设置为 Plain 时,这个tableview的section header在滚动时会默认悬停在界面顶端.取消这一特性的方法有两种: 将 style 设 ...
- session and cookie简析
无状态应用程序(cookies.session等机制出现的背景) Web应用程序服务器通常是“无状态的”: 每个HTTP请求都是独立的; 服务器无法判断2个请求是来自同一个浏览器还是用户. Web服务 ...
- python 列表复制给另一个列表,改值两个列表均会改变(备忘)
http://blog.csdn.net/lc_lc2000/article/details/53135839 本意是使A = B,B为一个列表,结果在后续对A的操作中,导致B中的值也改变了,才回忆起 ...
- Spring再接触 模拟Spring
项目分层: 1.最土的方法是直接写到main中去 2.分出model层 2.如下 4.在抽象一个对数据库的访问层(跨数据库实现) 面向抽象编程 User.java package com.bjsxt. ...
- Django 表关系
1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义2.order_by asc desc 1. 表关系的创建- OneToOne student = ...
- includes() 方法
字符串的includes()和数组中的includes()判断有没有括号里面的值,有的话为true,没有为false. 详细解析:https://blog.csdn.net/wu_xianqiang/ ...
- [leetcode]10. Regular Expression Matching正则表达式的匹配
Given an input string (s) and a pattern (p), implement regular expression matching with support for ...
- [leetcode]18. 4Sum四数之和
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...