Dato:
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()
C'è un modo per rendere il completionparametro (e action) di tipo Action?e anche mantenere @escaping?
La modifica del tipo genera il seguente errore:
L'attributo @escaping si applica solo ai tipi di funzione
Rimuovendo l' @escapingattributo, il codice viene compilato ed eseguito, ma non sembra essere corretto poiché la completionchiusura sta sfuggendo all'ambito della funzione.
@escapingattributo, il codice viene compilato ed eseguito" - Questo perché, come descritto in SR-2444 ,Action?è, per impostazione predefinita, in escape. Pertanto, rimuovere@escapingquando si utilizza la chiusura opzionale consente di ottenere ciò di cui hai bisogno.