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 completion
parametro (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' @escaping
attributo, il codice viene compilato ed eseguito, ma non sembra essere corretto poiché la completion
chiusura sta sfuggendo all'ambito della funzione.
@escaping
attributo, il codice viene compilato ed eseguito" - Questo perché, come descritto in SR-2444 ,Action?
è, per impostazione predefinita, in escape. Pertanto, rimuovere@escaping
quando si utilizza la chiusura opzionale consente di ottenere ciò di cui hai bisogno.