错误处理机制
,在swift
中的异常,必须在Controller
级别给处理掉,不能再次往上抛出。
//定义异常
enum ShopError:Error{
case goodNotFound//商品没有此货物
}
//抛出异常
func buy(good:String)throws -> String?{
if good == "APPLE" {
throw ShopError.goodNotFound
}
return "BANANA"
}
//再次往上抛出异常
func dodo(foo:String)throws -> String?{
let e = try buy(good: foo)
return e
}
Handing Error
try
a. 可用于异常,往上层抛出
b. 处理异常
do {
let result = try dodo(foo: "APPLE")
}catch ShopError.goodNotFound{
print("商店没有此货物")
}catch{
print("其他异常")
}
try!
使用这种情况下是,保证不会出错,所以我根本就不用去处理它可能会抛出的异常。但是一旦抛出异常就会出现崩溃
let result = try! dodo(foo: "APPLE")
try?
不关心是否出现异常,我只关心结果,出现异常就返回
nil
,否则返回可选的结果
let result = try? dodo(foo: "APPLE")
结果是一个可选值,出现异常就是nil
,否则就是Optional(值)
。可能会出现Optional(Optional(值))
这种情况