startWith

  • 该方法会在Observable序列开始之前插入一些事件元素. 即发生事件消息之前, 会发出这些预先插入的事件消息
Observable.of("2", "3")
.startWith("1")
.startWith("a")
.startWith("b")
.subscribe(onNext: { print($0) })
.disposed(by: bag)

merge

  • 该方法可以将多个(两个或者两个以上的)Observable序列合并生成一个Observable序列
let subject21 = PublishSubject<Int>()
let subject22 = PublishSubject<Int>()
Observable.of(subject21, subject22)
.merge()
.subscribe(onNext: { print($0) })
.disposed(by: bag) subject21.onNext(1)
subject22.onNext(100)
subject22.onNext(110)
subject22.onNext(120)
subject21.onNext(2)

zip

  • 该方法可以将多个(两个或者两个以上的)Observable序列压缩成一个Observable序列
  • 而且他会等到每个Observable事件一一对应的凑齐之后再合并
let subject31 = PublishSubject<Int>()
let subject32 = PublishSubject<String>()
Observable.zip(subject31, subject32) {
"\($0)\($1)"
}
.subscribe(onNext: { print($0) })
.disposed(by: bag) subject31.onNext(1)
subject32.onNext("a")
subject31.onNext(2)
subject32.onNext("b")
subject31.onNext(3)
subject31.onNext(4)
subject31.onNext(5) subject32.onNext("c")
subject32.onNext("d")
subject32.onNext("e") subject32.onNext("f")
subject31.onNext(6) subject31.onNext(7)
subject31.onNext(8)

combineLatest

  • 该方法同样是将多个(两个或者两个以上)Observable序列元素进行合并
  • 但与zip不同的是, 每当任意一个Observable有新的事件发出时, 他会将每个Observable序列的最新的一个事件元素进行合并
let subject41 = PublishSubject<Int>()
let subject42 = PublishSubject<String>()
Observable.combineLatest(subject41, subject42) {
"\($0)\($1)"
}
.subscribe(onNext: { print($0) })
.disposed(by: bag) subject41.onNext(1)
subject42.onNext("A")
subject41.onNext(2)
subject42.onNext("B")
subject42.onNext("C")
subject42.onNext("D")
subject41.onNext(3)
subject41.onNext(4)
subject41.onNext(5)

withLatestFrom

  • 该方法将两个Observable序列合并为一个. 每当self队列发射一个元素时, 便从第二个序列中取出最新的一个值
let subject51 = PublishSubject<String>()
let subject52 = PublishSubject<String>() subject51.withLatestFrom(subject52)
.subscribe(onNext: { print($0) })
.disposed(by: bag) subject51.onNext("A")
subject52.onNext("1")
subject51.onNext("B")
subject51.onNext("C")
subject52.onNext("2")
subject51.onNext("D")

switchLatest

  • switchLatest有点像其他语言的switch方法, 可以对事件流进行转换
  • 比如本来监听的subject1, 我可以通过更改Variable里面的value更换事件源. 变成监听subject2
let subject61 = BehaviorSubject(value: "A")
let subject62 = BehaviorSubject(value: "1") let variable6 = Variable(subject61) variable6.asObservable()
.switchLatest()
.subscribe(onNext: { print($0) })
.disposed(by: bag) subject61.onNext("B")
subject61.onNext("C") // 改变事件源
variable6.value = subject62
subject61.onNext("D")
subject62.onNext("2") // 改变事件源
variable6.value = subject61
subject62.onNext("3")
subject61.onNext("E")

Operation之结合操作符的更多相关文章

  1. Operation之过滤操作符

    filter 该操作符就是用来过滤掉某些不符合要求的事件 Observable.of(2, 30, 22, 5, 60, 3, 40, 9) .filter{ $0 > 10 } .subscr ...

  2. Operation之变换操作符

    buffer buffer方法的作用是缓冲组合, 第一个参数是缓冲时间, 第二个参数是缓冲个数, 第三个参数是线程 该方法简单来说就是缓存Observable中发出的新元素, 当元素达到某个数量, 或 ...

  3. Java基础常见英语词汇

    Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object ...

  4. IT软件开发常用英语词汇

    Aabstract 抽象的abstract base class (ABC)抽象基类abstract class 抽象类abstraction 抽象.抽象物.抽象性access 存取.访问access ...

  5. computer English

    算法常用术语中英对照Data Structures 基本数据结构Dictionaries 字典PriorityQueues 堆Graph Data Structures 图Set Data Struc ...

  6. 专业英语词汇(Java)

    abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存取 ['.kses]‘(n.入口, ...

  7. Java从零开始学十七(简单工厂)

    简单工厂的实现 实现一个计算器:要求输入2个数,和运算符,得到结果 Operation类 package com.pb.demo1; public class Operation { private ...

  8. JAVA常用单词

    柠檬学院Java 基础常见英语词汇(共 70 个)OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程JDK:Java d ...

  9. java常用英语单词

    abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...

随机推荐

  1. Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇

    Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Internet与中国 Internet最早来源于美 ...

  2. Alpha项目测试--个人第五次博客

    第五次个人博客--测试 这个作业属于哪个课程 系统分析与设计 这个作业的要求在哪里 Alpha项目测试 团队名称 西柚排课王 这个作业的目标 测试别人的项目,从客观的角度体验项目 一.测试项目一 团队 ...

  3. 用Photoshop软件实现批量压缩照片

    前提:手头有 "大" 照片,出于某种原因想把它变成 "小" 照片:电脑刚好安装有PS软件. 需知:如果您的压缩需求仅限于降低图片品质,降低图片像素,那么建议您采 ...

  4. qt 静态库中貌似不能使用静态属性

    今天一个问题搞的很郁闷,原本好好的工程,这两天加了几个类之后链接不通过了. 发现过程略去不说,最后去掉了类中的static属性,编译通过了.具体原因没时间仔细查了,反正尽量避免在静态链接库里使用sta ...

  5. Nuxt 学习资料

    Nuxt 学习资料 网址 官方网站 https://zh.nuxtjs.org/guide/installation

  6. rsync+inotify百万级文件实时同步

    实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...

  7. Windows Automation API和自动化测试

    https://zhuanlan.zhihu.com/p/22083601\ 感谢轮子哥点赞,这会儿消息扎堆过来了,轮带逛果然不是随便说说的…… 第二篇一个简单的Windows Automation ...

  8. c语言位域的使用注意事项——数据溢出

    c语言可以使用位域来节省变量的空间,例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.位域的取值范围非常有限,数据稍微大些就会发生溢出,这个字使用keil的使用,keil提 ...

  9. java.lang.IllegalStateException: Service id not legal hostname (leyou_item_service)

    . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ...

  10. docker 空间清理

    https://blog.csdn.net/qq_28001193/article/details/79555177 清理之后,重要的是找到原因,如上连接所示,其中一个占空间比较大的是日志文件,除了考 ...