我尝试理解Swift 2中的新错误处理方法。这是我做的:我首先声明了一个错误枚举:
enum SandwichError: ErrorType {
case NotMe
case DoItYourself
}
然后我声明了一个引发错误的方法(伙计们不是异常。这是一个错误。)。这是该方法:
func makeMeSandwich(names: [String: String]) throws -> String {
guard let sandwich = names["sandwich"] else {
throw SandwichError.NotMe
}
return sandwich
}
问题出在呼叫方。这是调用此方法的代码:
let kitchen = ["sandwich": "ready", "breakfeast": "not ready"]
do {
let sandwich = try makeMeSandwich(kitchen)
print("i eat it \(sandwich)")
} catch SandwichError.NotMe {
print("Not me error")
} catch SandwichError.DoItYourself {
print("do it error")
}
之后,do
行编译器说Errors thrown from here are not handled because the enclosing catch is not exhaustive
。但是我认为这是详尽无遗的,因为SandwichError
枚举中只有两种情况。
对于常规的switch语句,swift可以理解,在处理每种情况时,它都是详尽的。
do
顶层的块不是穷尽的-如果将do封装为非抛出函数,则会生成错误。