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 completion
parâ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 @escaping
atributo, o código compila e executa, mas não parece estar correto, pois o completion
fechamento está escapando do escopo da função.
@escaping
atributo, o código compila e executa" - Isso porque, conforme descrito no SR-2444 ,Action?
está, por padrão, escapando. Portanto, remover@escaping
ao usar o fechamento opcional realiza o que você precisa.