Dado:
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 alguma maneira de fazer o completionparâmetro (e action) do tipo Action?e também manter @escaping?
Alterar o tipo gera o seguinte erro:
O atributo @escaping se aplica apenas a tipos de função
Removendo o @escapingatributo, o código compila e executa, mas não parece estar correto, pois o completionfechamento está escapando do escopo da função.
@escapingatributo, o código compila e executa" - Isso porque, conforme descrito no SR-2444 ,Action?está, por padrão, escapando. Portanto, remover@escapingao usar o fechamento opcional realiza o que você precisa.