Swift - проверка типа / значения перечисления - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть структура enum для передачи либо значения данных, либо ошибки:

public enum Result<Value> {
    case success(Value)
    case failure(Error)
}

У меня также есть структура enum, которая выглядит следующим образом для отправки ошибок с нашего сетевого уровня:

public enum NetworkServiceError: String, Error {
    case jsonParsing = "Error parsing the json response from the server"
    case invalidUrlRequest = "Error forming the url request"
    case dataEncoding = "Error encoding the data"
}

Тип Result - это то, что передается через замыкание, что-то вроде следующего:

completion(.failure(NetworkServiceError.invalidUrlRequest))

Я пишу тестовый пример, и мне нужно иметь возможность проверить, если этоошибка была определенного типа из перечисленного выше.Чтобы дать вам представление о том, что я делаю и где я хочу это проверить, см. Следующий пример кода:

networkClient.callAPI() { (result) in
    switch result {
    case .success( _):
        // do something
    case .failure(let error):
        if error == NetworkServiceError.invalidUrlRequest { // THIS IS WHERE IT FAILS
            // do something
        } else {
            // do something
        }
    }
}

Я немного смущен тем, как поступить в моем случае;Я, наверное, упускаю из виду кое-что очень простое здесь.Заранее спасибо.

1 Ответ

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

Если вы посмотрите на реализацию из https://github.com/antitypical/Result,, вы увидите, что они делают оба типа Value и Error родовыми.Это позволило бы завершению завершения знать, какой тип ошибки он получает.Тогда коммутатор может совпадать с конкретными случаями.

Так что, если закрытие получило Result<Something, NetworkServiceError>, тогда корпус переключателя может стать

case .failure(.jsonParsing):

Если вы не хотитеизмените Result вы можете использовать такой случай, чтобы соответствовать определенному типу ошибки

case .failure(let error as NetworkServiceError):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...