"switch(error!.code)" 在 canEvaluatePolicy 函数中不存在 Swift 3 (Xcode 8)
"switch(error!.code)" in canEvaluatePolicy function does not exist in Swift 3 (Xcode 8)
我正在将下面的代码转换为 Swift 3.
if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error:nil) {
// 2.
context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics,
localizedReason: "Logging in with Touch ID",
reply: { (success : Bool, error : NSError? ) -> Void in
// 3.
dispatch_async(dispatch_get_main_queue(), {
if success {
self.performSegueWithIdentifier("dismissLogin", sender: self)
}
if error != nil {
var message : NSString
var showAlert : Bool
// 4.
switch(error!.code) {
第 4 步在 Xcode 8、Swift 3 上不再起作用。所以我无法执行以下情况:
switch(error!.code) {
case LAError.AuthenticationFailed.rawValue:
message = "There was a problem verifying your identity."
showAlert = true
break;
目前,我似乎还没有找到解决方案。有什么建议,请告诉我。
非常感谢!
首先更改evaluatePolicy
方法的回复关闭,在Swift 3中是Error
而不是NSError
。
reply: { (success : Bool, error : Error? ) -> Void in
其次,使用这样的标识符更改 performSegue。
performSegue(withIdentifier: "dismissLogin", sender: self)
在 Swift 3 中,您需要将 Error
对象转换为 NSError
或将 _code
与 Error
实例而不是 code
一起使用。
switch((error! as NSError).code)
或
switch(error!._code)
您还需要像这样更改分派语法。
Dispatch.async.main {
//write code
}
这实际上变得容易多了
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
本地化原因:"Logging in with Touch ID",
回复:{(成功:Bool,错误:Error?)-> Void in
// 3.
DispatchQueue.main.async {
if success {
self.performSegueWithIdentifier("dismissLogin", sender: self)
}
if let error = error {
var message : NSString
var showAlert : Bool
// 4.
switch error {
case LAError.userCancel:
//do stuff
这主要是靠记忆,但我认为是正确的。
我正在将下面的代码转换为 Swift 3.
if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error:nil) {
// 2.
context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics,
localizedReason: "Logging in with Touch ID",
reply: { (success : Bool, error : NSError? ) -> Void in
// 3.
dispatch_async(dispatch_get_main_queue(), {
if success {
self.performSegueWithIdentifier("dismissLogin", sender: self)
}
if error != nil {
var message : NSString
var showAlert : Bool
// 4.
switch(error!.code) {
第 4 步在 Xcode 8、Swift 3 上不再起作用。所以我无法执行以下情况:
switch(error!.code) {
case LAError.AuthenticationFailed.rawValue:
message = "There was a problem verifying your identity."
showAlert = true
break;
目前,我似乎还没有找到解决方案。有什么建议,请告诉我。
非常感谢!
首先更改evaluatePolicy
方法的回复关闭,在Swift 3中是Error
而不是NSError
。
reply: { (success : Bool, error : Error? ) -> Void in
其次,使用这样的标识符更改 performSegue。
performSegue(withIdentifier: "dismissLogin", sender: self)
在 Swift 3 中,您需要将 Error
对象转换为 NSError
或将 _code
与 Error
实例而不是 code
一起使用。
switch((error! as NSError).code)
或
switch(error!._code)
您还需要像这样更改分派语法。
Dispatch.async.main {
//write code
}
这实际上变得容易多了
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, 本地化原因:"Logging in with Touch ID", 回复:{(成功:Bool,错误:Error?)-> Void in
// 3.
DispatchQueue.main.async {
if success {
self.performSegueWithIdentifier("dismissLogin", sender: self)
}
if let error = error {
var message : NSString
var showAlert : Bool
// 4.
switch error {
case LAError.userCancel:
//do stuff
这主要是靠记忆,但我认为是正确的。