swift抛出异常_swift之异常处理
官网地址:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014097-CH42-ID508
1、定义枚举异常值
我们可以定义自己的异常枚举值,要遵循Error协议,Error协议是空的,不用实现任何东西。例如:
enumVendingMachineError: Error {caseinvalidSelectioncaseinsufficientFunds(coinsNeeded: Int)caseoutOfStock
}
2、定义抛出异常的方法
要定义抛出异常的方法,只需要在返回值的->前面加上throw就好了,例如:
func canThrowErrors() throws -> String
3、捕获异常
swift捕获异常有三种方法:
try方式 手动捕获异常
func test()->Void{do{
print(1)
let data=Data()tryJSONSerialization.jsonObject(with: data, options: .mutableContainers)//会被阻断
print("2")
}catch{
print(error)
}
print("3")
}
try?方式(常用)系统帮助我们处理异常,如果该方法出现异常,则该方法返回nil。如果没有异常,则返回对应的对象
func test()->Void{
print("1")
let data=Data()
guard (try? JSONSerialization.jsonObject(with: data, options: .mutableContainers)) != nil else{
print("2")return}
print("3")
}
try!方法(不建议,非常危险)直接告诉系统,该方法没有异常。注意:如果该方法出现了异常,那么程序会报错
func test()->Void{
print("1")
let data=Data()
let result= try!JSONSerialization.jsonObject(with: data, options: .mutableContainers)
print("3")
}
4、guard用法
与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。下面两段代码是等价的:
func fooBinding(x: Int?) {if let x = x where x > 0{//使用x
x.description
}//如果值不符合条件判断,就执行下面的代码
}
func fooGuard(x: Int?) {
guard let x= x where x > 0 else{//变量不符合条件判断时,执行下面代码
return}//使用x
x.description
}
swift抛出异常_swift之异常处理相关推荐
- python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例
本文主要介绍的是flask中主动抛出异常及统一异常处理的相关内容,具体如下. 在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后 ...
- java 抛出异常效率_Java异常处理机制
与C++.python,Ruby一样,Java也有一个异常处理机制,当程序出现异常时,系统会自动生成一个Exception对象通知程序去处理.之所以这样设计目的在于使程序有更好的容错性和可读性,实现业 ...
- 手动抛出异常_(七)异常处理
(七)异常处理 异常 异常的体系结构 java.lang.Throwable|-----java.lang.Error:一般不便携针对性的代码进行处理|-----java.lang.Exception ...
- java finally 抛出异常_java的异常处理机制(try catch finally)
1 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过, 我亲自体验的"教训"告诉我,这个东西可不是想象 ...
- swift 通知_Swift 闭包无脑加 [weak self] 行不行?
用到 Swift 的闭包的时候,我们经常会加 [weak self]. 但你有没有问过自己,它是不是非加不可? 比如这个场景: class YourViewController {override f ...
- swift扩展_Swift扩展
swift扩展 Continuing with our series of Swift tutorials, we'll be discussing and playing around with S ...
- swift 脚本_Swift脚本和命令行参数
swift 脚本 In this tutorial, we'll discuss how to create Scripts in Swift. Yes, Swift is a scripting l ...
- swift简介_Swift简介
swift简介 Clear examples to demonstrate the basics. 清晰的示例说明基本知识. 涵盖的主题 (Topics Covered) Variables变数 Da ...
- swift 循环_Swift进行循环,切换,同时
swift 循环 In this tutorial, we'll be looking into the wide variety of statements that Swift has to of ...
最新文章
- R可视化绘制指数分布(Exponential Distribution)
- javascript动画函数封装(升级版)
- 【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )
- Apache Beam欲通过uber api获取大数据
- java enum枚举的使用详情(实例与原理分析)
- 【Python】Python数据分析来解析,2021年度最具“钱景”的大学专业
- 百万奖金!交通事件、医学病理、广告检测,江苏大数据开发与应用大赛报名...
- 解决无法将自己github上的代码clone到/usr目录下的问题
- layui的富文本编辑器如何上传图片,以及后期处理
- java 常见 错误_JAVA几个常见错误简析
- 斗地主AI算法——第九章の被动出牌(3)
- 为什么感觉赚100万很难?
- php记录上次观看记录,PHP Cookei记录用户历史浏览信息的代码
- Kafka从上手到实践 - 庖丁解牛:Partition | 凌云时刻
- Android开发之来电电话挂断实现
- EventBus使用详解(二)——EventBus使用进阶
- 源火星球——青龙 详细教程
- php rtx,Ubuntu 手记之RTX (腾讯通)
- 多普达Dopod德版D900刷机有惊无险经历之总结
- java自定义注解及获取注解参数
热门文章
- 青龙面板JDC企业微信设置消息推送教程
- 如何解决hadoop文件无法浏览问题“Failed to retrieve data from /webhdfs/v1/?op=LISTSTATUS: Server Error“
- 如何防止PDF内容随意分享并设定文件失效日期
- 【数字图像处理】【Matlab】【汽车车牌识别】任务+原理+设计方案
- 马云被评为“十年十大思想者”,演讲说出“扎心”金句:蠢比癌症更可怕
- 计算机设计大赛科学,2018年中国大学生计算机设计大赛举行
- Python numpy 判断零矩阵,判断某个值(a)是否在矩阵中
- 汽车电子学习笔记---RZ、NRZ、NRZ1、曼彻斯特编码
- 50页超漂亮的PPT 3D图表
- 清除AD过期的帐户和计算机