错误枚举-案例的常用参数

时间:2018-11-15 14:14:49

标签: swift error-handling

我的应用程序中有示例错误枚举:

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,因为每个人都会完全一样。

有什么办法可以以某种通用的方式处理这些错误?

1 个答案:

答案 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)
}