- 在Swift中
Error
是一个协议,只有在遵循Error
协议以后才能使用throw
来抛出一个错误
enum nameErrorType: Error {
case nilError
case unknowError
}
- 创建一个抛错的函数(使用
throws
来表示一个可以抛出错误的函数)
//使用 `throws` 来表示一个可以抛出错误的函数
func nameCheck (_ name: String) throws -> String{
if name == "NULL" {
throw nameErrorType.nilError
}
return name
}
3.错误处理
- 在Swift中一般错误处理使用
do-catch
,在do
代码块中使用try
来标记代码块
func errorTest() {
do {
let str = try nameCheck("NULL")
print(str)
} catch {
print("nil error , Name is NULL!", error)
}
}
- 可以使用多个
catch
块来处理错误。类似switch
的处理。(最后加入一个空的catch
,用于关闭catch)
func errorTest() {
do {
let str = try nameCheck("NULL")
print(str)
} catch nameErrorType.nilError{
print("nil error , Name is NULL!")
} catch nameErrorType.unknowError{
print("unknow error")
} catch{
//加入一个空的catch,用于关闭catch
}
}
- 使用
try?
将错误处理结果转换为可选的,即函数如果是抛错那么返回值为nil
let str = try? nameCheck("NULL")
-
defer
的使用
-
defer
代码块表示在函数返回前,函数中最后执行的代码,从以下方法可以看出defer
代码块的作用
func deferCheck() {
print("1")
defer{
print("3")
}
print("2")
}
//输出结果为
//1
//2
//3
- 所以在错误处理中我们经常会用到defer来处理一些我们无论如何都需要运行的功能
func errorTest() {
defer{
print("check over")
}
do {
let str = try nameCheck("NULL")
print(str)
} catch nameErrorType.nilError {
print("nil error , Name is NULL!")
} catch nameErrorType.unknowError{
print("unknow error")
} catch{
//加入一个空的catch,用于关闭catch。否则会报错:Errors thrown from here are not handled because the enclosing catch is not exhaustive
}
}
//输出结果
//nil error , Name is NULL!
//check over
网友评论