当前位置: 首页 > news >正文

RxSwift系列(四)异常处理和调试操作

一、异常处理

1.catchErrorJustReturn

当遇到 error 事件的时候,就返回指定的值,然后结束。

enum MyError: Error {case Acase B
}let disposeBag = DisposeBag()let sequenceThatFails = PublishSubject<String>()sequenceThatFails.catchErrorJustReturn("错误").subscribe(onNext: { print($0) }).disposed(by: disposeBag)sequenceThatFails.onNext("a")
sequenceThatFails.onNext("b")
sequenceThatFails.onNext("c")
sequenceThatFails.onError(MyError.A)
sequenceThatFails.onNext("d")//运行结果:a b c 错误

2.catchError

捕获 error,并对其进行处理。同时还能返回另一个 Observable 序列进行订阅(切换到新的序列)。

let disposeBag = DisposeBag()let sequenceThatFails = PublishSubject<String>()
let recoverySequence = Observable.of("1", "2", "3")sequenceThatFails.catchError {print("Error:", $0)return recoverySequence}.subscribe(onNext: { print($0) }).disposed(by: disposeBag)sequenceThatFails.onNext("a")
sequenceThatFails.onNext("b")
sequenceThatFails.onNext("c")
sequenceThatFails.onError(MyError.A)
sequenceThatFails.onNext("d")//运行结果
//a
//b
//c
//Error: A
//1
//2
//3

3.retry

当遇到错误的时候,会重新订阅该序列。比如遇到网络请求失败时,可以进行重新连接。retry() 方法可以传入数字表示重试次数。不传的话只会重试一次。

let disposeBag = DisposeBag()
var count = 1let sequenceThatErrors = Observable<String>.create { observer inobserver.onNext("a")observer.onNext("b")//让第一个订阅时发生错误if count == 1 {observer.onError(MyError.A)print("Error encountered")count += 1}observer.onNext("c")observer.onNext("d")observer.onCompleted()return Disposables.create()
}sequenceThatErrors.retry(2)  //重试2次(参数为空则只重试一次).subscribe(onNext: { print($0) }).disposed(by: disposeBag)//运行结果
//a
//b
//Error encoutered
//a
//b
//c
//d

二、调试操作

1.debug

我们可以将 debug 调试操作符添加到一个链式步骤当中,这样系统就能将所有的订阅者、事件、和处理等详细信息打印出来,方便我们开发调试。

let disposeBag = DisposeBag()Observable.of("2", "3").startWith("1").debug("调试1").subscribe(onNext: { print($0) }).disposed(by: disposeBag)

2.RxSwift.Resources.total

通过将 RxSwift.Resources.total 打印出来,我们可以查看当前 RxSwift 申请的所有资源数量。这个在检查内存泄露的时候非常有用。

print(RxSwift.Resources.total)let disposeBag = DisposeBag()print(RxSwift.Resources.total)Observable.of("BBB", "CCC").startWith("AAA").subscribe(onNext: { print($0) }).disposed(by: disposeBag)print(RxSwift.Resources.total)//运行结果
//0
//2
//AAA
//BBB
//CCC
//3

相关文章:

RxSwift系列(四)异常处理和调试操作

一、异常处理 1.catchErrorJustReturn 当遇到 error 事件的时候&#xff0c;就返回指定的值&#xff0c;然后结束。 enum MyError: Error {case Acase B }let disposeBag DisposeBag()let sequenceThatFails PublishSubject<String>()sequenceThatFails.catchErrorJ…...

Excel基础:电子表格Excel的使用技巧合集

一、内容 1.表格下拉框选择内容...

教育技术革新:SpringBoot在线教育系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理微服务在线教育系统的相关信息成为必然。开…...

【大数据入门 | Hive】Join语句

1. 等值join Hive支持通常的sql join语句&#xff0c;但是只支持等值连接&#xff0c;不支持非等值连接。但sql是支持非等值连接的。 1&#xff09;案例实操 &#xff08;1&#xff09;根据员工表和部门表中的部门编号相等&#xff0c;查询员工编号、员工名称和部门名称。 …...

爬虫案例——爬取情话网数据

需求&#xff1a; 1.爬取情话网站中表白里面的所有句子&#xff08;表白词_表白的话_表白句子情话大全_情话网&#xff09; 2.利用XPath来进行解析 3.使用面向对象形发请求——创建一个类 4.将爬取下来的数据保存在数据库中 写出对应解析语法 //div[class"box labelbo…...

端模一体,猎豹移动对大模型机器人发展路径清晰

今年世界机器人大会刚刚收官不久&#xff0c;接咖啡、拿苹果、摊煎饼……人形机器人在这届大会上备受关注&#xff0c;厂商们编排“整活”&#xff0c;展位几乎水泄不通。 自从AI大模型开始全面改变市场开始&#xff0c;关于机器人的方向性争论就不绝于耳&#xff0c;就在最近的…...

操作系统笔记

1、操作系统是什么 操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件&#xff0c;它管理计算机的资源和进程以及所有软硬件。为计算机提供一种中间层&#xff0c;使得应用软件和硬件进行分离&#xff0c;让我们无需关注硬件的实现&#xff…...

两个wordpress网站共用一个数据库的数据表

在WordPress中&#xff0c;如果你想要两个不同的网站调用同一个数据表&#xff0c;你可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;使用共享数据库 1. 设置共享数据库&#xff1a; – 确保两个WordPress网站都可以访问同一个数据库。 – 在数据库服务器上创建一…...

工具方法 - 面试中回答问题的技巧

在面试中&#xff0c;回答问题的技巧尤为重要。它不仅展示了你的知识和能力&#xff0c;还体现了你处理压力和沟通的技巧。以下是一些在面试中常用的回答技巧&#xff0c;以及如何在这些场合有效地回应问题的示例&#xff1a; 1. 抓住问题的核心 面试官通常会提出直接的问题&a…...

频繁full gc问题排查及解决

为什么我们要对频繁full gc的情况进行处理---》频繁full gc会导致stw&#xff0c;影响用户体验。 &#xff08;1&#xff09;先进行问题的排查 如果频繁full gc 会报警&#xff0c;公司有自己的监控平台&#xff0c;可以查看full gc的情况 如果公司没有自己的监控平台&#…...

昇思学习打卡营第33天|基于MindSpore的恶性皮肤肿瘤识别

1. 实验介绍 本次实验的目标是基于MindSpore框架&#xff0c;训练一个ResNet50模型&#xff0c;用于恶性皮肤肿瘤的分类识别。本实验将使用包含四类皮肤肿瘤图片的数据集&#xff0c;针对ResNet50模型进行微调&#xff0c;训练出一个能够精准分类皮肤病的模型。主要过程包括数据…...

基于SpringBoot+Vue的网约车管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Java、PHP、ASP、JSP、Kotlin、.NET、Go

Java 1995年&#xff0c;Java诞生了&#xff0c;微软的Java是J#&#xff0c;早期是J. 它在C的基础上增强了安全性&#xff0c;不允许多重继承&#xff0c;堆栈不允许类对象&#xff0c;数组和枚举都是类对象。 Java的诞生 早期的Sun公司想要在消费级嵌入式设备编写可移植的代码…...

华为-单臂路由

1、什么是单臂路由 单臂路由&#xff08;Single-Arm Routing&#xff09;是一种网络架构和配置技术&#xff0c;它允许路由器通过一个物理接口来管理多个虚拟局域网&#xff08;VLAN&#xff09;之间的通信。 这个物理接口被配置为Trunk模式&#xff0c;以便能够传输来自不同VL…...

AI应用的东风,奥特曼不想错过

文&#xff5c;魏琳华 编&#xff5c;王一粟 作为炙手可热的AI公司&#xff0c;Open AI又一次拿到了一轮足以令对手眼红的巨额融资。10月2日&#xff0c;Open AI宣布顺利完成66亿美元融资&#xff0c;补上了烧钱研发亏损的同时&#xff0c;还为下一轮竞争拿到了资金支持。 跻…...

LeetCode[中等] 238. 除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂…...

Linux plt表调用汇编代码分析

linux调用共享库中的函数时通过plt表和got表实现位置无关代码&#xff0c;过程中涉及到lazy binding&#xff0c;即在第一调用外部函数时解析被调用的函数地址并将地址写入到got表&#xff0c;后续调用则不需要解析函数地址&#xff0c;具体过程如下 1.c程序如下 #include &l…...

ubunut声卡配置 播放视频没有声音的解决方法 蓝牙问题

文章目录 &#x1f315;ubuntu22.04网页没有声音&#xff0c;声卡提示Dummy Output&#x1f319;方法一&#xff1a;切换内核&#x1f319;方法二&#xff1a;UBUNTU 声卡提示Dummy Output或伪输出解决办法&#xff08;2020.04.02&#x1f319;方法三&#xff1a;解决Ubuntu18.…...

《软件工程概论》作业一:新冠疫情下软件产品设计

课程说明&#xff1a;《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论&#xff08;第6版&#xff09;》&#xff08;张海藩等编著&#xff0c;清华大学出版社&#xff09;作为教材。以《软件设计文档国家标准GBT8567-2006》…...

大厂出来的人为什么不比你高效?

在最近参加的一个线下聚会上&#xff0c;有人问我&#xff1a;“我们单位有来自阿里、腾讯、华为这些大厂的人&#xff0c;为什么我没觉得他们做事比我们这些没大厂经历的人更有章法和效率&#xff1f;”你别说&#xff0c;这一问所反映的现象&#xff0c;与我在阿里巴巴工作时…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...