2017-04-24 2 views
1

J'ai mis à jour vers Swift 3.1, et je reçois quelques nouvelles erreurs qui semblent être des problèmes de syntaxe 3.1, car ils n'étaient pas un problème avant la migration. La plupart du temps ils sont liés à la fermeture, comme dans cet exemple: - '? ((UIAlertAction) -> de Void)'Swift 3.1: Impossible de convertir la valeur de type '(_) ->()' erreur/Problèmes avec des fermetures

let alert = UIAlertController(title: "Success", message: "Thanks for participating in our raffle!", preferredStyle: UIAlertControllerStyle.alert) 
       alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { 

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

      })) 

Impossible de convertir la valeur de type '()> Void type d'argument attendu

Des idées sur la façon dont je pourrais corriger cela pour pouvoir compiler mon code au moins à court terme?

Merci.

Répondre

4

entrée pour votre gestionnaire est de type (UIAlertAction), ajoutez simplement la ligne suivante à votre code.

handler: { 
       action in 

solution complète

let alertVC = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert) 
     alertVC.addAction(UIAlertAction(title: "Ok", style: .default, handler: { 
      action in 
      self.performSegue(withIdentifier: "go", sender: self) 
     })) 
+1

Avez-vous des idées pour savoir pourquoi cela est nécessaire dans Swift 3.1, mais pas dans 3.0? –

+0

btw .. si vous pensez que la question pourrait être pertinente pour les autres développeurs, j'apprécierais un upvote. –

+0

vous pouvez vérifier les changements Api dans Xcode. Dans Xcode 8.3 -> Aide -> Changements Api – AkBombe

0

Publiez le bloc entier de code qui vous donne une erreur. Il semble que vous essayez d'attribuer une fermeture à une variable plutôt que le résultat de cette fermeture.

Essayez d'ajouter() à la fin de votre expression de fermeture, ce qui provoquerait le compilateur d'essayer d'évaluer la fermeture et de l'utiliser est la valeur de retour plutôt que la fermeture lui-même:

TextRow(){ row in 
       row.title = "First Name" 
       row.placeholder = "John" 
       row.add(rule: RuleRequired()) 
      }() 
+0

.. J'ai trouvé modifié que ses fermetures en général qui me donnent du mal, alors j'ai ajouté un exemple plus descriptif. Votre suggestion d'ajouter() n'a pas fonctionné. –