这是我在Swift中的代码:
if (LAContext().canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)) {
return true;
}使用Swift2,我将代码更改为如下所示:
if #available(iOS 8, *) {
if (LAContext().canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)) {
return true;
}
}但我得到了以下错误:
调用可以抛出,但它没有被标记为“try”,错误也不会被处理。
我做错什么了?
发布于 2015-06-29 11:51:53
你需要这样做:
do {
try laContext.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics)
// Call evaluatePolicy here
} catch {
print("Cannot evaluate policy, error: \(error)")
}返回Bool并将inout NSError?作为最后一个参数的所有方法都会自动转换(Swift 2)以引发错误,因此参数被移除。而且,Bool是多余的,因为它等于inout NSError?是否为零。
编辑:要获取有关错误的更多信息,请在捕获区中使用以下内容:
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
}(您可以通过点击LAError查看所有可能的错误
编辑:在XCode 7 beta 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 }
}
}发布于 2015-08-09 07:21:13
试试下面的代码:
do {
try touchIDContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics)
//Comprobar la repuesta de esa autentificacion
touchIDContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: mensaje, reply: { (success, ErrorType) -> Void in
if success
{
// Autentificacion correcta
alert.title = "Genial!"
alert.message = "Te has autentificado correctamente"
// Mostramos este Alerview
self.presentViewController(alert, animated: true, completion: nil)
}
else
{
//AUTENTIFICACION FALLIDA
//PASAMOS VALORES AL ALERTVIEW
alert.title = "AUTENTIFICACION FALLIDA!!"
//OFRECEMOS MAS INFORMACION SOBRE EL FALLO DE AUTENTIFICAICON
switch ErrorType!.code {
case LAError.UserCancel.rawValue: alert.message = "Usuario Cancela"
case LAError.AuthenticationFailed.rawValue: alert.message = "Autentificacion Fallida!"
case LAError.PasscodeNotSet.rawValue: alert.message = "Password no configurado"
case LAError.SystemCancel.rawValue: alert.message = "Error de sistema"
case LAError.UserFallback.rawValue:alert.message = "Usuario selecciona contrasen"
default:alert.message = "Imposible Autentificarse"
}
//Mostramos el AlertView
self.presentViewController(alert, animated: true, completion: nil)
}
}) // cierre del clousure
} // cierre del do
catch {
print("Cannot evaluate policy, error: \(error)")
} // cierre del catch发布于 2017-01-13 10:52:27
对于Swift 3,我这样做:
context.evaluatePolicy(policy, localizedReason: ...) { (success: Bool, error: Error?) in
DispatchQueue.main.async {
if success {
...
} else if let error = error as? LAError {
switch error.code {
case LAError.authenticationFailed:
...
}
}
}
}https://stackoverflow.com/questions/31112899
复制相似问题