Siesta Swift: RequestError.Cause.RequestCancelled не соответствует _ErrorCodeProtocol

Я пытаюсь проверить, какую именно ошибку может выдать запрос, выполнив некоторые пользовательские проверки и выдав свои собственные пользовательские ошибки.

if let cause = resource.latestError?.cause {
    if case RequestError.Cause.RequestCancelled = cause {

    }
}

Я получаю эту ошибку:

Тип аргумента 'RequestError.Cause.RequestCancelled.Type' не соответствует ожидаемому типу '_ErrorCodeProtocol'

Любые идеи, как я мог бы проверить, какова точная причина ошибки, а затем вернуть мои собственные ошибки?

1 ответ

Решение

Причины ошибок Сиесты открыты для расширения и, следовательно, не для перечисления, поэтому if case Синтаксис не работает с ними. (Ошибка компилятора в том, что Swift думает, что вы пытаетесь использовать case извлечь код ошибки из ошибки, в которой ее нет.)

Причины ошибок Сиесты - это дерево разных типов. Вместо того, чтобы использовать if case, соответствие ошибки вызывает с помощью is:

if let cause = resource.latestError?.cause {
  if cause is RequestError.Cause.RequestCancelled {

  }
}

... или просто:

if resource.latestError?.cause is RequestError.Cause.RequestCancelled {

}

... или если вам нужно присвоить ошибку суженного типа переменной, чтобы вы могли сделать с ней что-то еще:

if let cause = resource.latestError?.cause as? RequestError.Cause.RequestCancelled {

}
Другие вопросы по тегам