我想捕获带有参数的自定义错误,但也可以访问该错误以在其上调用某些函数。你是怎样做的? (我不想只捕获CustomError并在catch块内进行切换。)
enum CustomError: Error {
case error(code: Int)
func describe() -> String {
...
}
}
...
do {
try bad()
} catch let error as CustomError.error(let code) { // This doesn't work
print(error.describe())
} catch {
....
}
有点重复,但是通读语言参考之后,我认为没有办法优雅地做到这一点:
do {
try bad()
} catch CustomError.error(let code) {
print(CustomError.error(code: code).describe())
} catch {
}
这利用了code
和情况.error
是CustomError
仅有的两种状态的事实。这意味着我们可以重新创建错误对象,并在其上调用describe
。