这是我的 Swift 代码:
if (LAContext().canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)) {
return true;
}
使用 Swift2,我将代码更改为如下所示:
if #available(iOS 8, *) {
if (LAContext().canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)) {
return true;
}
}
但我收到以下错误:
调用可以抛出,但没有标记“try”并且错误不被处理
我究竟做错了什么?
你需要做这样的事情:
do {
try laContext.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics)
// Call evaluatePolicy here
} catch {
print("Cannot evaluate policy, error: \(error)")
}
所有返回 a 的方法Bool
并有一个inout NSError?
由于最后一个参数被自动转换(Swift 2)以引发错误,因此该参数被删除。还有Bool
是多余的,因为它等于是否inout NSError?
is nil
编辑:要获取有关错误的更多信息,请在捕获中使用它:
switch LAError(rawValue: error.code)! {
case .AuthenticationFailed:
break
case .UserCancel:
break
case .UserFallback:
break
case .SystemCancel:
break
case .PasscodeNotSet:
break
case .TouchIDNotEnrolled:
break
default:
break
}
(你可以通过CMD点击查看所有可能的错误LAError
编辑:在 XCode 7 beta 5/6 中,此方法不再抛出,但需要一个NSErrorPointer
作为最后一个参数(就像NSURL
's checkResourceIsReachableAndReturnError
由于我不知道的原因)。不过,您可以延长您的LAContext
如果你愿意的话,可以像以前一样制作一个投掷方法:
extension LAContext {
func canEvaluatePolicyThrowing(policy: LAPolicy) throws {
var error : NSError?
canEvaluatePolicy(policy, error: &error)
if let error = error { throw error }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)