2016-09-28 2 views
0

Je conversion ci-dessous code Swift 3."switch (erreur! .code)" en fonction canEvaluatePolicy n'existe pas dans Swift 3 (Xcode 8)

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) { 

Étape 4 ne fonctionne plus sur Xcode 8, Swift 3. donc, je ne pouvais pas les cas suivants:

switch(error!.code) { 
      case LAError.AuthenticationFailed.rawValue: 
      message = "There was a problem verifying your identity." 
      showAlert = true 
      break; 

Actuellement, il est semble qu'il n'y avait pas de solution que je pouvais trouver encore. Toute suggestion, s'il vous plaît faites le moi savoir.

Merci beaucoup!

+0

Pas encore de solution? Le premier coup de '[sw ift3] code d'erreur' est http://stackoverflow.com/questions/38711269/accessing-code-in-swift-3-error. –

Répondre

9

Première modification de la fermeture de la réponse de la méthode evaluatePolicy, dans Swift 3, elle est Error et non NSError.

reply: { (success : Bool, error : Error?) -> Void in 

Deuxièmement, le changement performSegue avec identifiant comme celui-ci.

performSegue(withIdentifier: "dismissLogin", sender: self) 

Swift 3 vous devez convertir Error objet à NSError ou utiliser _code avec Error par exemple au lieu de code.

switch((error! as NSError).code) 

OU

switch(error!._code) 

Vous devez changer également vous décomposez cette syntaxe.

Dispatch.async.main { 
    //write code 
} 
+0

La première option est de travailler un charme, bro. Tu es le meilleur. Merci beaucoup! –

+0

Welcome mate :) –

+1

Il devrait également utiliser 'si let error = error' au lieu de' if error! = Nil' et éviter de déplier l'objet d'erreur. – bsarr007

2

Cela fait beaucoup plus facile a

context.evaluatePolicy (.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Connexion avec Touch ID", réponse: {(succès: Bool, erreur: erreur) - > Void dans

// 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 

Ceci est la plupart du temps de la mémoire, mais je pense qu'il est correct.