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. linux中网络部分的总结

    二.简述iproute家族命令 静态配置地址的方法有一下几种方式: (1)ifconfig (2)ip命令 (3)GUI工具 (4)TUI工具 (5)编辑配置文件 1.ifconfig 查看接口:if ...

  2. python导入模块被加横线

    2018-07-03 04:20:41 bluelilyfly 阅读数 1238   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...

  3. K-th Path CodeForces - 1196F

    题目链接:https://vjudge.net/problem/CodeForces-1196F 题意:从图中找出第K短的最短路,最短路:从一个点到另一个的最短距离. 思路:题目说了,每两个点之间的边 ...

  4. 逆向破解之160个CrackMe —— 021

    CrackMe —— 021 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  5. 关于 " i=i++"是否等价于"i=i+1"的问题探讨 -Java版/C版

    如题 (总结要点) 假设i=1 ,那么 i=i++ 的结果也就是2, 对吗? 不对,是1. -总结如下: 测试过程如下: 1.java版 public class Test { public stat ...

  6. blockingqueue.h

    #include <mutex> #include <condition_variable> #include <deque> template <typen ...

  7. postman:设置环境变量(参数化 & 关联)

    postman是测试接口的主要工具之一 我们的测试环境主要分为test(测试环境)和pre_production(预生产环境),而他们的api都是一样的,只是ip及端口不一样 所以,我们可以设置环境变 ...

  8. RunLoop与线程,RunLoop的作用--runloop模型即位事件处理模型

    runloop的三大责任:生命周期管理.通信.调度. 一.线程缺省生命周期基础上的生命周期管理: 二.线程接收外部信息的通道 通过消息队列实现. 三.RunLoop即是消息处理循环,也是事件调度策略机 ...

  9. es6 -- 与解构赋值默认值结合使用

    参数默认值可以与解构赋值的默认值,结合起来使用. function foo({x, y = 5}) { console.log(x, y) } foo({}) // undefined 5 foo({ ...

  10. 「GXOI / GZOI2019」宝牌一大堆 (DP)

    题意 LOJ传送门 题解 可以发现「七对子」 和 「国士无双」直接暴力就行了. 唯一的就是剩下的"3*4+2". 考试的时候写了个爆搜剪枝,开了O2有50pts.写的时候发现可以D ...