RxSwift 系列(七)

前言

本篇文章将要学习RxSwift中连接操作符。
Connectable Observable在订阅时不发射事件消息,而是仅当调用它们的connect()方法时才发射消息,这样就可以等待所有我们想要的订阅者都已经订阅了以后,再开始发出事件消息,这样能保证我们想要的所有订阅者都能接收到事件消息。其实也就是等大家都就位以后,开始发出消息。

在开始学习Connectable Observable之前,让我们来看一个non-connectable operator:

let intervar = Observable<Int>.interval(1, scheduler: MainScheduler.instance)

_ = intervar.subscribe(onNext: {print("subscribe:1, event:\($0)")})

delay(5, closure: { (_) in
        _ = intervar.subscribe(onNext: {print("subscribe:2, event:\($0)")})
    })

Connectable ObservableRxSwift中包括了:

publish

将一个源Observable sequence转变为一个connectable sequence

let intervar = Observable<Int>.interval(1, scheduler: MainScheduler.instance).publish()

_ = intervar.subscribe(onNext: {print("subscribe:1, event:\($0)")})

_ = intervar.subscribe(onNext: {print("subscribe:2, event:\($0)")})

intervar.connect()

你可以试试把intervar.connect()注释掉,会发现并没有任何响应。

replay

将一个正常的sequence转换成一个connectable sequence,然后和replaySubject相似,能接收到订阅之前的事件消息。

let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
        .replay(5)

_ = intSequence
    .subscribe(onNext: { print("Subscription 1:, Event: \($0)") })

delay(2) { _ = intSequence.connect() }

delay(4) {
    _ = intSequence
        .subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
}

delay(8) {
    _ = intSequence
        .subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
}

multicast

将一个正常的sequence转换成一个connectable sequence,并且通过特性的subject发送出去,比如PublishSubject,或者replaySubjectbehaviorSubject等。不同的Subject会有不同的结果。

let subject = PublishSubject<Int>()

_ = subject
    .subscribe(onNext: { print("Subject: \($0)") })

let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
    .multicast(subject)

_ = intSequence
    .subscribe(onNext: { print("\tSubscription 1:, Event: \($0)") })

delay(2) { _ = intSequence.connect() }

delay(4) {
    _ = intSequence
        .subscribe(onNext: { print("\tSubscription 2:, Event: \($0)") })
}

delay(6) {
    _ = intSequence
        .subscribe(onNext: { print("\tSubscription 3:, Event: \($0)") })
}

致谢

如果发现有错误的地方,欢迎评论,感谢!

时间: 2024-10-06 12:02:10

RxSwift 系列(七)的相关文章

struts2官方 中文教程 系列七:消息资源文件

介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字段标签,并根据用户的语言环境将文本更改为特定的语言. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列七:消息资源文件  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 信息资源属性文件 在Struts2 we

Exchange Server2013 系列七:客户端访问服务器高可用性部署实战

杜飞 在前面的文章中我们介绍了客户端访问服务器的高可用性技术,从这篇文章开始,我们就来看一个详细的高可用性部署方案. 首先,看一下我们的服务器列表: 编号 服务名 IP地址 功能 1 HYV01 IP:10.41.3.6 \16  网关:10.41.1.254 宿主机 2 HYV02 IP:10.41.4.6 \16  网关:10.41.1.254 宿主机 3 DF-DC01 IP:10.41.4.210\16 网关:10.41.1.254 DNS:10.41.4.210   10.41.4.2

RxSwift 系列(九)

前言 看完本系列前面几篇之后,估计大家也还是有点懵逼,本系列前八篇也都是参考RxSwift官方文档和一些概念做的解读.上几篇文章概念性的东西有点多,一时也是很难全部记住,大家脑子里面知道有这么个概念就行,用的时候,再来查阅一番,慢慢就掌握了. 本篇主要来深入了解一些RxSwift实战中用到的一些重要知识点,这里面有很多自己的理解,所以不免会有一些错误的地方,还请大家多多交流,如有发现错误的地方,欢迎评论. 概念 Rx系列的核心就是Observable Sequence这个相信大家心中已经有所了解

RxSwift 系列(三)

RxSwift 系列(三) -- Combination Operators 前言 本篇文章将要学习如何将多个Observables组合成一个Observable.Combination Operators在RxSwift中的实现有五种: startWith merge zip combineLatest switchLatest startWith 在Observable释放元素之前,发射指定的元素序列.更多详情上面这句话是什么意思呢?翻译成大白话就是在发送一个东西之前,我先发送一个我指定的东

C语言快速入门系列(七)

C语言快速入门系列(七) C语言指针进阶 本章引言: 在前面第5节中我们对C语言的指针进行了初步的学习理解;作为C语言的灵魂, C指针肯定没那么简单,在这一节中,我们将会对指针进行进一步的学习,比如二级指针, 指针数组,内存分配和const修饰指针常量等!下面就请大家跟随笔者的脚步,对 C指针神秘的一面进行进一步的解析吧! 本节学习路线图: 函数与指针: ①指针作为函数的形参: ②指向函数的指针: ③指针函数: ④带参数的主函数 ps:该代码的运行:先要编译生成exe文件后,来到exe所在文件目

Maven 系列 七 :Maven的生命周期和插件

一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周期是抽象的,其中的具体任务都交由插件来完成.Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin.用户也可自行配置或编写插件. 1 . 三套生命周期 Maven定义了三套生命周期:clean.default.site,每个生命周期都包含了一些阶段(phase).三套生命周期相互独立,但各个生

7.oracle学习门户系列七---网络管理和配置

oracle学习门户系列七 网络管理和配置 们学习了模式和用户.包含模式定义以及模式的作用. 这篇我么来看下ORACLE数据库中的网络管理和配置.只是这篇好像和上篇没有继承啊.这怎么看? Ok,事实上呢-..咳咳-..我们继续往下走 数据库的网络配置是比較基础可是也是很重要的.假设一个数据库连不上外部的世界:那么他就是一个孤立的资源,基本上就能够确认这是个无用的数据库系统. 我们在数据库定义中以前讲过,数据库是须要有多用户分享的,没有网络何来分享呢?对不正确.那肯定不是数据库了嘛. 前面摘要已经

iOS流布局UICollectionView系列七——三维中的球型布局

摘要: 类似标签云的球状布局,也类似与魔方的3D布局 iOS流布局UICollectionView系列七--三维中的球型布局 一.引言 通过6篇的博客,从平面上最简单的规则摆放的布局,到不规则的瀑布流布局,再到平面中的圆环布局,我们突破了线性布局的局限,在后面,我们将布局扩展到了空间,在Z轴上进行了平移,我们实现了一个类似UIPickerView的布局模型,其实我们还可以再进一步,类比于平面布局,picKerView只是线性排列布局在空间上的旋转与平移,这次,我们更加充分了利用一下空间的尺寸,来

S5PV210开发系列七_Nand驱动实现

S5PV210开发系列七 Nand驱动实现 象棋小子    1048272975 Nand flash具有大容量.改写速度快.接口简单等优点,适用于大量数据的存储,为固态大容量存储提供了廉价有效的解决方案.各种电子产品中如手机存储器.sd卡.u盘等均采用Nand flash存储,笔者此处就Nand驱动实现作一个简单的介绍. 1.  Nand flash概述 东芝公司在1989年最先发表Nand flash结构,强调降低每比特的成本,更高的性能,并且像磁盘一样可以通过接口轻松升级.随着Nand技术