Перечисление Swift + связанное значение + проверка регистра

У меня есть следующее быстрое перечисление для возврата асинхронного API-ответа:

enum Result<U: Equatable> {
  case success(output: U)
  case failure(error: Error)
}

Для упрощения моей реализации модульного теста я хотел бы проверить, равняется ли возвращенное значение результата одного из моих методов успешному

Я знаю, что могу развернуть перечисление результата, используя следующее утверждение

if case Result.success(let configuration) = result {
    // use unwrapped configuration object
}

То, что я хотел бы заархивировать, это использовать однострочный оператор, чтобы проверить, если результат будет успешным при проверке с expect

expect(case Result.success(let configuration) = result).to(beTrue()) <-- not compiling

1 ответ

Решение

Если ваша цель - проверить только успех / неудачу (не детали успеха или неудачи), вы можете дополнить перечисление переменными только для чтения. isSuccess а также isFailure:

enum Result<U: Equatable> {

    case success(output: U)
    case failure(error: Error)

    var isSuccess: Bool {
        switch self {
        case .success:
            return true
        default:
            return false
        }
    }
    var isFailure: Bool {
        switch self {
        case .failure:
            return true
        default:
            return false
        }
    }
}

И ожидаем, что результат будет успешным:

expect(result.isSuccess)
Другие вопросы по тегам