///< 声明枚举错误类型
enum PrinterError:Error {
case OutOfPaper
case NoToner
case OnFire
}
///< 捕捉异常的五种方式
///< 1.使用 throw来抛出一个错误
func send(job: Int, printerName:String) throws ->String {
if printerName =="Never Has Toner" {
throw PrinterError.NoToner
}
return "Job sent"
}
///< 2.do catch 在代码块中执行操作,
do {
let printerResponse = trysend(job: 1040, printerName:"Bi Sheng")
print(printerResponse)
}catch {
print(error)
}
///< 3.do catch ...
do {
let printerResponse = trysend(job: 1440, printerName:"Gutenberg")
print(printerResponse)
}catch PrinterError.OnFire {
print("I'll just put this over here, with the rest of the fire.")
}catch let PrinterErroras PrinterError {
print("Printer error:\(PrinterError).")
}catch {
}
///< 4.try 另一种处理错误的方式使用 try?将结果转换为可选的。如果函数抛出错误,该错误会被抛弃并且结果为 ni l。否则的话,结果会是一个包含函数返回值的可选值。
let printerSuccess = try?send(job: 1884, printerName:"Mergenthaler")
let printerFailure = try?send(job: 1885, printerName:"Never Has Toner")
print(printerSuccess ?? "")
print(printerFailure ?? "")
///< 5.defer 使用 defer代码块表示在函数返回前,会调用。
var fridgeIsOpen = false
let fridgeContent = ["milk","eggs", "leftovers"]
func fridgeContains(_ food:String) ->Bool {
fridgeIsOpen =true
defer {
fridgeIsOpen =false
}
let result = fridgeContent.contains(food)
return result
}
let string = fridgeContains("bannana")
print(string)