【发布时间】:2018-11-15 14:14:48
【问题描述】:
我的应用程序中有示例错误枚举:
public enum APIError: Error {
case IncorrectArguments(message: String)
case MissingArgument(message: String)
}
错误处理如下:
do {
return try next.respond(to: request)
} catch let error as APIError {
throw Abort(.badRequest, reason: error.message)
}
但我在这里遇到编译错误:Value of type 'APIError' has no member 'message'。
我知道我可以通过模式匹配获取参数,但我不想以完全相同的方式处理每种情况:
do {
return try next.respond(to: request)
} catch APIError.MissingArgument(let message) {
throw Abort(.badRequest, reason: message)
} catch APIError.IncorrectArguments(let message) {
throw Abort(.badRequest, reason: message)
}
将来枚举中可能会有更多 APIErrors,我不想使用单独的 catch 块来处理每个错误,因为每个人都会完全一样。
有没有办法以某种通用方式处理这些错误?
【问题讨论】:
-
您在 catch 中抛出错误。您想在函数中抛出错误并在
Do..Catch中捕获它 -
throw Abort是 Vapor 以给定状态和消息返回响应的方式。 -
@Blejwi 检查我的答案。
标签: swift error-handling