J'apprends Swift lang, mais je ne peux pas passer d'argument de rappel facultatif dans la fonction:
func dismiss(completion: () -> Void) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
Cela me montre une erreur - Type () -> Void does not conform to protocol 'LogicValue'
Aucune suggestion?
Mise à jour pour Swift 3/4:
Une option n'est plus une expression booléenne et la func dismissModalViewControllerAnimated(animated: Bool)
obsolète n'est plus disponible dans Swift.
Déclarez simplement le paramètre d'achèvement comme une fermeture facultative et transmettez-le à
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
qui prend également une fermeture facultative:
func dismiss(completion: (() -> Void)? = nil) {
self.dismiss(animated: true, completion: completion)
}
Ancien (Swift 1.x?) Réponse:
Déclarez le paramètre completion
comme (implicitement déplié) facultatif fermeture (() -> Void)!
:
func dismiss(completion: (() -> Void)!) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true)
}
Mais notez que vous pouvez appeler
self.dismissViewControllerAnimated(true, completion: completion)
dans tous les cas, car le paramètre completion
de cette fonction est également optionnel. Et
func dismissModalViewControllerAnimated(animated: Bool)
est en fait marqué comme obsolète.
Ajout juste à la réponse de Martin R ci-dessus ..
Le rappel peut être facultatif, au lieu d'un paramètre implicite (avec point d'exclamation), utilisez l'opérateur facultatif.
func dismiss(completion: (() -> Void)?) {
if completion != nil {
return self.dismissViewControllerAnimated(true, completion: completion!)
}
self.dismissModalViewControllerAnimated(true)
}
Il est préférable d'ajouter = nil
Dans la déclaration de rappel, pour éviter de passer à zéro lors de l'appel:
func dismiss(completion: (() -> Void)? = nil) {
if (completion) {
return self.dismissViewControllerAnimated(true, completion: completion)
}
self.dismissModalViewControllerAnimated(true) }
Et vous pouvez appeler votre fonction comme ceci: dismiss()