当前位置: 首页 > 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
http://www.lryc.cn/news/454165.html

相关文章:

  • Excel基础:电子表格Excel的使用技巧合集
  • 教育技术革新:SpringBoot在线教育系统开发
  • 【大数据入门 | Hive】Join语句
  • 爬虫案例——爬取情话网数据
  • 端模一体,猎豹移动对大模型机器人发展路径清晰
  • 操作系统笔记
  • 两个wordpress网站共用一个数据库的数据表
  • 工具方法 - 面试中回答问题的技巧
  • 频繁full gc问题排查及解决
  • 昇思学习打卡营第33天|基于MindSpore的恶性皮肤肿瘤识别
  • 基于SpringBoot+Vue的网约车管理系统
  • Java、PHP、ASP、JSP、Kotlin、.NET、Go
  • 华为-单臂路由
  • AI应用的东风,奥特曼不想错过
  • LeetCode[中等] 238. 除自身以外数组的乘积
  • Linux plt表调用汇编代码分析
  • ubunut声卡配置 播放视频没有声音的解决方法 蓝牙问题
  • 《软件工程概论》作业一:新冠疫情下软件产品设计
  • 大厂出来的人为什么不比你高效?
  • 71.【C语言】动态内存管理(重点)(4)
  • JavaScript 用HTML5约束验证API做表单验证
  • Unity 编辑器多开
  • 【Spring Boot React】Spring Boot和React教程 完整版
  • Linux中的多线程
  • 《计算机原理与系统结构》学习系列
  • 征程6 工具链常用工具和 API 整理(含新手示例)
  • 我有一张图,我怎么让midjourney按照这张图继续生成呢?
  • MSF捆绑文件
  • 01_SQLite
  • 【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】