Swift异常处理
在Swift里,抛出的异常必须继承Error这个协议。那么这个协议是什么呢?
按住command再点击Error我们可以看到,
public protocol Error {
}
extension Error {
}
显然这个协议是空的,之所以还会有个空扩展,就是官方为了强调这个协议的确是空的,
只是为了标记错误的。
然后下面是我自己的例子,非常简单
enum numTest:
Int,
Error {
case _0, _1, _2, _3
case nothing = 999
}
func errorTest(by num:
Int) throws
-> String {
switch num {
case 0:
throw
numTest._0
case 1:
throw
numTest._1
case 2:
throw
numTest._2
case 3:
throw
numTest._3
case 10:
throw
numTest.nothing
default:
return "OK"
+ "
\(num)"
}
}
for i in
0...10 {
do {
try
print(errorTest(by:
i))
}catch numTest._0
{
print("wrong
0")
}catch numTest._1
{
print("wrong
1")
}catch numTest._2
{
print("wrong
2")
}catch numTest._3
{
print("wrong
3")
}catch {
print("unknow")
}
}
最后运行结果
wrong 0
wrong 1
wrong 2
wrong 3
OK 4
OK 5
OK 6
OK 7
OK 8
OK 9
unknow
Swift异常处理的更多相关文章
- Swift异常处理:throw和rethrow
Swift异常处理体现了函数式语言的特性.因此我们能够传一个会抛出异常的函数闭包(高阶函数)作为參数传到还有一个函数中(父函数),父函数能够在子函数抛出异常时直接向上抛出异常,这时用rethrowke ...
- iOS - Swift 异常处理
前言 在 Swift 1.0 时代是没有异常处理和抛出机制的,如果要处理异常,要么使用 if else 语句或 switch 语句判断处理,要么使用闭包形式的回调函数处理,再要么就使用 NSError ...
- Swift # 异常处理
面向轨道编程 - Swift 中的异常处理 问题 在开发过程中,异常处理算是比较常见的问题了. 举一个比较常见的例子:用户修改注册的邮箱,大概分为以下几个步骤: 接收到一个用户的请求:我要修改邮箱地址 ...
- Swift异常处理的try?与try!
首先要明白抛出异常后异常的运动:异常被抛出后,中断整个处理,异常不断向外层(范围)传递,直到遇到catch代码块群,会与catch代码块的条件进行匹配,匹配符合则进入此代码块处理.如果遇到没有条件的c ...
- swift 中异常的处理方法
swift 中什么时候需要处理异常,在调用系统某个方法的时,该方法最后有一个throws 说明该方法会抛出异常,如果一个方法抛出异常,那么需要对该异常进行处理 swift 异常处理提供了三种方法 方式 ...
- Swift try try! try?使用和区别
Swift try try! try?使用和区别 一.异常处理try catch的使用 1. swift异常处理 历史由来 Swift1.0版本 Cocoa Touch 的 NSError ,Swif ...
- Swift 使用 日常笔记
//------------------- var totalPrice: Int = { willSet(newTotalPrice) { //参数使用new+变量名且变量名首地址大写 printl ...
- Mac终端使用swift REPL异常处理方法
Mac终端使用swift REPL异常处理方法 终端使用swift命令出现 warning: Swift error in module libmarisa.dylibDebug info from ...
- Swift 2.0 异常处理
转自:http://www.jianshu.com/p/96a7db3fde00 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主 ...
随机推荐
- Html调用 QQ接口
<A href="tencent://message/?uin=1805843351&Site=有事Q我&Menu=yes"> <img styl ...
- mvc 发送QQ邮件
试图部分代码: @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } ...
- Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
系统为SpringMVC框架,在开发的过程中有一些工具类需要调用下由spring管理的service层.但是一进注入不进来,报null异常: 在尝试了网上的一系列方法后,还是没有解决.网上的解决方法主 ...
- 03-树1 树的同构(25 point(s)) 【Tree】
03-树1 树的同构(25 point(s)) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为 ...
- POJ 2506 Tiling (递推 + 大数加法模拟 )
Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7965 Accepted: 3866 Descriptio ...
- Codeforces Beta Round #56 A. Where Are My Flakes? —— 贪心
题目链接:http://codeforces.com/problemset/problem/60/A A. Where Are My Flakes? time limit per test 2 sec ...
- VK Cup 2015 - Round 2 E. Correcting Mistakes —— 字符串
题目链接:http://codeforces.com/contest/533/problem/E E. Correcting Mistakes time limit per test 2 second ...
- 关于URL编码的一些结论
转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html与http://www.ruanyifeng.com/blog/2007/10/ ...
- RTMP协议的理解
RTMP协议:real time message protocol 工作原理: 先采集摄像头视频和麦克风音频信息,再进行音视频的编码(mpeg),通过FMLE(Flash Media Live Enc ...
- nyoj 1030 hihocoder 1338
题目链接1: 点这里打开. 题目链接2: 点击打开链接 思路:dp,dp[i][j] 表示某个人在区间 i,j上的得分. sum数组表示前 n 项和, num 数组用来存输入的数字. 因为取数字是 ...