官网地址: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之异常处理相关推荐

  1. python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例

    本文主要介绍的是flask中主动抛出异常及统一异常处理的相关内容,具体如下. 在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后 ...

  2. java 抛出异常效率_Java异常处理机制

    与C++.python,Ruby一样,Java也有一个异常处理机制,当程序出现异常时,系统会自动生成一个Exception对象通知程序去处理.之所以这样设计目的在于使程序有更好的容错性和可读性,实现业 ...

  3. 手动抛出异常_(七)异常处理

    (七)异常处理 异常 异常的体系结构 java.lang.Throwable|-----java.lang.Error:一般不便携针对性的代码进行处理|-----java.lang.Exception ...

  4. java finally 抛出异常_java的异常处理机制(try catch finally)

    1 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过, 我亲自体验的"教训"告诉我,这个东西可不是想象 ...

  5. swift 通知_Swift 闭包无脑加 [weak self] 行不行?

    用到 Swift 的闭包的时候,我们经常会加 [weak self]. 但你有没有问过自己,它是不是非加不可? 比如这个场景: class YourViewController {override f ...

  6. swift扩展_Swift扩展

    swift扩展 Continuing with our series of Swift tutorials, we'll be discussing and playing around with S ...

  7. swift 脚本_Swift脚本和命令行参数

    swift 脚本 In this tutorial, we'll discuss how to create Scripts in Swift. Yes, Swift is a scripting l ...

  8. swift简介_Swift简介

    swift简介 Clear examples to demonstrate the basics. 清晰的示例说明基本知识. 涵盖的主题 (Topics Covered) Variables变数 Da ...

  9. swift 循环_Swift进行循环,切换,同时

    swift 循环 In this tutorial, we'll be looking into the wide variety of statements that Swift has to of ...

最新文章

  1. R可视化绘制指数分布(Exponential Distribution)
  2. javascript动画函数封装(升级版)
  3. 【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )
  4. Apache Beam欲通过uber api获取大数据
  5. java enum枚举的使用详情(实例与原理分析)
  6. 【Python】Python数据分析来解析,2021年度最具“钱景”的大学专业
  7. 百万奖金!交通事件、医学病理、广告检测,江苏大数据开发与应用大赛报名...
  8. 解决无法将自己github上的代码clone到/usr目录下的问题
  9. layui的富文本编辑器如何上传图片,以及后期处理
  10. java 常见 错误_JAVA几个常见错误简析
  11. 斗地主AI算法——第九章の被动出牌(3)
  12. 为什么感觉赚100万很难?
  13. php记录上次观看记录,PHP Cookei记录用户历史浏览信息的代码
  14. Kafka从上手到实践 - 庖丁解牛:Partition | 凌云时刻
  15. Android开发之来电电话挂断实现
  16. EventBus使用详解(二)——EventBus使用进阶
  17. 源火星球——青龙 详细教程
  18. php rtx,Ubuntu 手记之RTX (腾讯通)
  19. 多普达Dopod德版D900刷机有惊无险经历之总结
  20. java自定义注解及获取注解参数

热门文章

  1. 青龙面板JDC企业微信设置消息推送教程
  2. 如何解决hadoop文件无法浏览问题“Failed to retrieve data from /webhdfs/v1/?op=LISTSTATUS: Server Error“
  3. 如何防止PDF内容随意分享并设定文件失效日期
  4. 【数字图像处理】【Matlab】【汽车车牌识别】任务+原理+设计方案
  5. 马云被评为“十年十大思想者”,演讲说出“扎心”金句:蠢比癌症更可怕
  6. 计算机设计大赛科学,2018年中国大学生计算机设计大赛举行
  7. Python numpy 判断零矩阵,判断某个值(a)是否在矩阵中
  8. 汽车电子学习笔记---RZ、NRZ、NRZ1、曼彻斯特编码
  9. 50页超漂亮的PPT 3D图表
  10. 清除AD过期的帐户和计算机