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. python正则表达式(2)--编译正则表达式re.compile

    编译正则表达式-- re.compile 使用re的一般步骤是先将正则表达式的字符串形 式编译为pattern实例,然后使用pattern实例处理文本并获取匹配结果(一个Match实例(值为True) ...

  2. cmds挖掘redolog

      select member from v$logfile;   exec dbms_logmnr.add_logfile(logfilename=>'+CMDSDG/cmds/onlinel ...

  3. swift的类型系统

    顶级抽象:protocol 具体类型:值类型.引用类型 类型操作:扩展 其他: 范型.函数式类型:function.monand

  4. MySQL中列别名为中文时,Order by 子句中使用别名时不要加引号

    暂时还不清楚原因 1.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 SC表: 这里,当做总成绩处理 select sid, sum(score) as '总成绩', avg(score) ...

  5. Traefik 2.0 tcp 路由试用

    对于tcp 的路由是基于sni (需要tls)但是可以通过统配(*) 解决不试用tls的,当然也可以让Traefik 自动生成tls 证书 以下是测试http 以及mysql 的tcp 路由配置(de ...

  6. 洛谷P2293 高精开根

    锣鼓2293 写完了放代码 应该没什么思维难度 ———————————————————————————————————————————————————————— python真香 m=input() ...

  7. K8s Service原理介绍

    Service的工作方式有三种: 第一种: 是Userspace方式 如下图描述, Client Pod要访问Server Pod时,它先将请求发给本机内核空间中的service规则,由它再将请求, ...

  8. mybatis 根据多个id查询数据 foreach标签

    //根据设备多个id获取设备信息 public List<Devices> getDevicesAll(@Param("devicesIds") String[] de ...

  9. nagios监控的安装

    本文中,物理机IP 192.168.1.105虚拟linux主机ip 192.168.1.10安装apache和phpApache 和Php 不是安装nagios 所必须的,但是nagios提供了we ...

  10. Xshell远程登录

    1.xshell由一台服务器a登录另一台服务器b sftp -oPort = root@ip 2.下载git /上传pull git b服务器想下载的目标文件目录 a服务器上的文件下载目录