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

时间:2018-10-18 23:49:08

标签: swift auth0

我正在使用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

但是在回调函数中,错误。_code始终等于1

如何获取-3的实际值?

1 个答案:

答案 0 :(得分:1)

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