Dans mon application, j'ai plusieurs scénarios, chacun affichant une UIAlertController
différente. J'ai donc créé une fonction pour afficher cette alerte, mais je ne peux pas sembler appeler l'auto.Fonction dans "okAction". Je reçois cette erreur:
La valeur de type
'ViewController'
n'a pas de membre'doAction'
Voici le code:
func showAlertController( titleOfAlert: String, messageOfAlert : String, doAction : () )
{
let refreshAlert = UIAlertController(title: titleOfAlert, message: messageOfAlert, preferredStyle: .Alert)
let okAction = UIAlertAction(title: "Save", style: UIAlertActionStyle.Default) {
UIAlertAction in
self.doAction()
}
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default) {
UIAlertAction in
}
refreshAlert.addAction(okAction)
refreshAlert.addAction(cancelAction)
self.presentViewController(refreshAlert, animated: true, completion: nil)
}
Voici l'une des fonctions que j'appelle:
func changeLabel1()
{
label.text = "FOR BUTTON 1"
}
Comment puis-je le résoudre ?
De votre code doAction est le troisième paramètre de la fonction showAlertController.
so Premièrement: changez doAction: () en doAction: () -> () Cela signifie que doAction est un Closure sans paramètre et retour vide.
Deuxièmement: l'appel ne devrait pas être self.doAction () mais juste doAction () Parce que c'est un paramètre et non une variable d'instance
Je pense que la bonne façon de spécifier une fermeture est la suivante:
func showAlertController( titleOfAlert: String, messageOfAlert : String, doAction : (() -> Void) ){
// and then call it like that
doAction()
}
Le point clé ici est que vous ne pouvez pas appeler this.doAction()
car le paramètre que vous transmettez à la fonction n'est pas une propriété de votre contrôleur, n'est-ce pas?