这是我在Swift中的代码:
if (LAContext().canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)) {
return true;
}
Run Code Online (Sandbox Code Playgroud)
使用Swift2,我将代码更改为:
if #available(iOS 8, *) {
if (LAContext().canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
调用可以抛出,但它没有标记为'try',并且没有处理错误
我究竟做错了什么?
你需要做这样的事情:
do {
try laContext.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics)
// Call evaluatePolicy here
} catch {
print("Cannot evaluate policy, error: \(error)")
}
Run Code Online (Sandbox Code Playgroud)
所有返回a Bool并具有inout NSError?最后一个参数的方法都会自动转换(Swift 2)以抛出错误,因此删除了参数.这Bool也是多余的,因为它等于是否inout NSError?为零
编辑:要获取有关错误的更多信息,请在catch中使用:
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
}
Run Code Online (Sandbox Code Playgroud)
(您可以通过CMD点击查看所有可能的错误 LAError
编辑:在Xcode 7测试版5/6这种方法不抛出了,但需要一个NSErrorPointer作为最后一个参数(一样NSURL的checkResourceIsReachableAndReturnError不知道我的原因).但是LAContext,如果您愿意,可以像以前一样扩展您的投掷方法:
extension LAContext {
func canEvaluatePolicyThrowing(policy: LAPolicy) throws {
var error : NSError?
canEvaluatePolicy(policy, error: &error)
if let error = error { throw error }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |