Swift中的Catch子句必须是详尽无遗的。是否意味着每当我想避免错误传播时,我总是需要使用通配符或空catch子句?例如:
enum Oops: Error {
case oh, ouch, meh
}
func troublemaker() {
do { throw Oops.meh }
catch Oops.oh {}
catch Oops.ouch {}
catch Oops.meh {}
// Error: Error is not handled because the enclosing catch is not exhaustive
}
当然,如果我将throws
添加到函数中,它就会被修复。同样适用于添加catch {}
或catch _ {}
。
但有没有办法以其他方式制作详尽的捕获块?比如,也许定义允许抛出的错误类型,所以我的枚举错误会让它变得详尽无遗?
答案 0 :(得分:1)
如果您只是不喜欢多个catch块,请立即捕获所有错误,然后切换错误类型
func troublemaker() {
do { throw Oops.meh }
catch let error{
switch error {
case Oops.meh:
print("It works!")
break
default:
print("Oops something else is wrong")
break
}
}
}