Быстрая проверка, является ли переменная ошибки НЕ конкретным c случаем некоторой ошибки - PullRequest
0 голосов
/ 08 мая 2020

У меня есть ошибка, и мне нужно проверить, НЕ конкретный c случай MyError:

enum MyError {
    case one(description: String)
    case two(description: String)
    case three(description: String)
    (...)
}

Я могу легко проверить, является ли переменная error конкретный c случай MyError:

if case MyError.one = error {
    // this is definitely error MyError.one
}

Как я могу убедиться, что это НЕ конкретный c случай?

if (...) { // something like: !(case MyError.one = error)
    // this is any other case but NOT MyError.one
}

Я знаю, что могу сделать это с помощью guard ключевое слово или if-else, но мне интересно, есть ли более элегантное решение (поскольку охраннику нужен return):

guard case MyError.one = error else {
    // this is any other case but NOT MyError.one
    return
}

1 Ответ

0 голосов
/ 08 мая 2020

Вы также можете добавить вспомогательные методы в свое перечисление:

enum MyError {
    case one(description: String)
    case two(description: String)
    case three(description: String)

    var isOne:Bool {
        if case MyError.one = self {
            return true
        }
        return false
    }
}

К сожалению, сделать что-либо более простое, чем это, в настоящее время невозможно. Вот несколько хороших тем по этой и смежным темам:

  1. Как сравнить enum со связанными значениями, игнорируя связанное с ним значение в Swift?
  2. Как проверить равенство перечислений Swift со связанными значениями
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...