錯誤處理機制,在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!
使用這種情況下是,保證不會出錯,所以我根本就不用去處理它可能會拋出的異常。但是一旦拋出異常就會出現(xiàn)崩潰
let result = try! dodo(foo: "APPLE")
try?
不關(guān)心是否出現(xiàn)異常,我只關(guān)心結(jié)果,出現(xiàn)異常就返回
nil,否則返回可選的結(jié)果
let result = try? dodo(foo: "APPLE")
結(jié)果是一個可選值,出現(xiàn)異常就是nil,否則就是Optional(值)??赡軙霈F(xiàn)Optional(Optional(值))這種情況