Swift中你可以像其他语言一样抛出异常处理异常,今天我们就详细地说说Swift中的异常抛出和处理。
在一开始我们要定义错误或者说是异常,Swift中的一些简单异常可以使用枚举定义,注意这个枚举要继承一个空协议Error,如下代码:

enum OperationError : Error {
case ErrorOne
case ErrorTwo
case ErrorThree(String)
case ErrorOther
}

这里定义了一个异常值的枚举,接下来我们再写个函数来使用这些异常值,能够抛出异常的函数一定要在函数的表达式后面添加关键字 throws (这种函数一般称作throwing函数),如果这个函数有返回值 throws 关键字要写在 ->ReturnType前面,看代码:

func numberTest(num:Int) throws{
if num == 1 {
print("成功")
}else if num == 2 {
throw OperationError.ErrorTwo
}else if num == 3{
throw OperationError.ErrorThree("失败")
}else {
throw OperationError.ErrorOther
}
}

这是个很简单的函数,可以根据传入参数的值来确定是否抛出异常,抛出何种异常值。
下面看第一种异常处理错误传递法,顾名思义就是函数自己不处理异常将异常抛出给上一级,让上一级处理,如下代码所示:

//错误传递
func throwDeliver(num:Int) throws ->String {
print("错误传递")
try numberTest(num: num)
print("未传递错误")
return "无错误"
}

throwDeliver这个throwing函数它本身并没有处理numberTest函数可能抛出的异常,而是把异常抛给了调用throwDeliver这个函数的地方处理了。能够传递异常的它本身一定是throwing

第二种使用do-catch捕获处理异常,在do闭包里面执行会抛出异常的代码,在catch 分支里面匹配异常处理异常,看代码:

//do-catch错误捕获
do {
print("do-catch 错误捕获")
try throwDeliver(num: 5)
print("未捕获错误")
} catch OperationError.ErrorOne {
print("ErrorOne:")
} catch OperationError.ErrorTwo {
print("ErrorTwo:")
} catch OperationError.ErrorThree(let discription) {
print("ErrorThree:"+discription)
}catch let discription{
print(discription)
}

第三种,将异常转换成可选值,如果一个语句会抛出异常那么它将返回nil无论这个语句本来的返回值是什么:

//错误转成可选值
if let retureMessage = try? throwDeliver(num: 1) {
print("可选值非空:"+retureMessage)
}

第四种,禁止异常传递,只有当你确定这个语句不会抛出异常你才可以这么做否则会引发运行时错误:

//禁止错误传递
print(try! throwDeliver(num: 1)+":禁止错误传递")

最新文章

  1. Ionic设置ion-slide-box不启用(不通过$ionicSlideBoxDelegate)
  2. iOS10以上关于访问权限设置
  3. T-Sql(三)存储过程(Procedure)
  4. JDBC API Description
  5. WPF自适应可关闭的TabControl 类似浏览器的标签页
  6. Python入门笔记(20):Python函数(3):关于lambda
  7. 【Unity】13.1 场景视图中的GI可视化
  8. LeetCode:Remove Duplicates from Sorted List I II
  9. 安卓 DevOps:从一次推送命令到生产
  10. XMPP协议实现原理介绍
  11. wdlinux mysql innodb的安装
  12. HDU1027 Ignatius and the Princess II 【next_permutation】【DFS】
  13. Math 对象 识记
  14. Mysql 的 create as 和create like 区别
  15. Linux文件夹文件改英文
  16. rar自动压缩备份
  17. 微信小程序——微信卡券的领取和查看
  18. bzoj 2216 Lightning Conductor - 二分法 - 动态规划
  19. CentOS ./configure && make && make install详解
  20. JS笔记 - JQ事件委托( 适用于给动态生成的脚本元素添加事件)

热门文章

  1. shell项目-告警系统
  2. IE兼容性开发的笔记
  3. js02 变量数据类型
  4. 13.AxisUtil
  5. 2. APIS官网剖析(博主推荐)
  6. TrueSec引导的Linux系统和安全检测工具预览
  7. jmeter--FTP测试
  8. CODEVS——T1519 过路费
  9. 词向量 word2vec
  10. Matrix学习——基础知识