Donné:
typealias Action = () -> ()
var action: Action = { }
func doStuff(stuff: String, completion: @escaping Action) {
print(stuff)
action = completion
completion()
}
func doStuffAgain() {
print("again")
action()
}
doStuff(stuff: "do stuff") {
print("swift 3!")
}
doStuffAgain()
Existe-t-il un moyen de rendre le completion
paramètre (et action
) de type Action?
et de le conserver également @escaping
?
Changer le type donne l'erreur suivante:
L'attribut @escaping s'applique uniquement aux types de fonction
En supprimant l' @escaping
attribut, le code se compile et s'exécute, mais ne semble pas être correct car la completion
fermeture échappe à la portée de la fonction.
@escaping
attribut, le code se compile et s'exécute" - C'est parce que, comme décrit dans SR-2444 ,Action?
est, par défaut, échappement. Ainsi, la suppression@escaping
lors de l'utilisation de la fermeture optionnelle accomplit ce dont vous avez besoin.