Swift - Могу ли я прочитать значение перечисления как необязательное без переключения? - PullRequest
0 голосов
/ 17 июня 2020

Имеет ли Swift синтаксис, похожий на case .enumCase(let value) = enum, который можно использовать как однострочник для чтения перечисления как конкретного случая c или nil

Например, с Swift.Result вместо

let error: Error?
if case let .failure(value) = result {
  error = value
} else {
  error = nil
}

можно написать что-нибудь как

case let .failure(error) = result // Well this I can't
let error = result.as(.failure)

1 Ответ

0 голосов
/ 17 июня 2020

Для упрощения работы с Result (или другими перечислениями) вы можете использовать следующее расширение:

extension Result {
    var value: Success? {
        if case let .success(value) = self {
            return value
        }
        return nil
    }

    var error: Failure? {
        if case let .failure(error) = self {
            return error
        }
        return nil
    }
}

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

let value = result.value
let error = result.error

if let value = result.value {
    print(value)
}

if let error = result.error {
    print(error)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...