我的应用程序中有示例错误枚举:
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)
}
将来,枚举中可能会出现更多APIError,并且我不想使用单独的catch块来处理每个APIError,因为每个人都会完全一样。
有什么办法可以以某种通用的方式处理这些错误?
答案 0 :(得分:2)
您可以像这样在枚举上定义计算属性:
public enum APIError: Error {
case IncorrectArguments(message: String)
case MissingArgument(message: String)
var message: String {
switch self {
case .IncorrectArguments(let message): return message
case .MissingArgument(let message): return message
}
}
}
然后从catch clouser调用消息计算的属性,如下所示:
do {
return try next.respond(to: request)
} catch let error as APIError {
throw Abort(.badRequest, reason: error.message)
}