Получить код ошибки из enum: ошибка в swift 4.2 - PullRequest
0 голосов
/ 19 октября 2018

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

у них есть функция, которая возвращает:

return callback(.touchFailed($0!), nil)

$ 0 являетсяLAError и .touchFailed объявляются как

public enum CredentialsManagerError: Error {
    case noCredentials
    case noRefreshToken
    case failedRefresh(Error)
    case touchFailed(Error)
}

$ 0._code имеет значение -3

, но в функции обратного вызова error._code всегда равен 1

Как я могу получить фактическое значение -3?

1 Ответ

0 голосов
/ 19 октября 2018

Проблема в том, что вы смотрите на неправильный объект ошибки.Прибывают два объекта ошибки: внешняя ошибка (.touchFailed) и внутренняя ошибка, заключенная в нее.Внутренняя ошибка - это та, которую вы хотите изучить.Но вы не проверяете это!

Чтобы понять, что я имею в виду, посмотрите, что сделано неправильно и правильно:

public enum CredentialsManagerError: Error {
    case noCredentials
    case noRefreshToken
    case failedRefresh(Error)
    case touchFailed(Error)
}

// let's make a `.touchFailed`
let innerError = NSError(domain: "yoho", code: -3, userInfo: nil)
let outerError = CredentialsManagerError.touchFailed(innerError)

// now let's examine them
// first, the wrong way
print(outerError._code) // 1, because it's the outer error
// now, the right way
if case let .touchFailed(what) = outerError {
    print(what._code) // -3 <--!!!!
}
...