"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 或将 _codeError 实例而不是 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

这主要是靠记忆,但我认为是正确的。