Ошибки Enum - общие параметры для случаев - PullRequest
0 голосов
/ 15 ноября 2018

В моем приложении есть образец enum Error:

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 в enum, и я не хочу обрабатывать каждый из них, используя отдельный блок catch, потому что все будут точно такими же.

Есть ли способ обработать эти ошибки каким-либо общим способом?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете определить вычисляемые свойства для перечисления следующим образом:

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 следующим образом:

do {
    return try next.respond(to: request)
} catch let error as APIError {
    throw Abort(.badRequest, reason: error.message)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...