从枚举中获取错误代码:swift 4.2 中的错误

Get error code from enum : error in swift 4.2

我正在使用 Auth0 并且在使用生物识别时,他们返回错误但错误代码不正确。

他们有一个功能returns:

return callback(.touchFailed([=11=]!), 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 的实际值?

问题是您查看了错误的错误对象。有两个错误对象到达,外部错误 (.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 <--!!!!
}