Diberikan:
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()
Apakah ada cara untuk membuat completion
parameter (dan action
) bertipe Action?
dan juga menyimpannya @escaping
?
Mengubah jenisnya memberikan kesalahan berikut:
Atribut @escaping hanya berlaku untuk tipe fungsi
Menghapus @escaping
atribut, kode mengkompilasi dan menjalankan, tetapi tampaknya tidak benar karena completion
penutupan keluar dari ruang lingkup fungsi.
@escaping
atribut, kode mengkompilasi dan menjalankan" - Itu karena, seperti yang dijelaskan dalam SR-2444 ,Action?
secara default, melarikan diri. Jadi, melepas@escaping
ketika menggunakan penutupan opsional memenuhi apa yang Anda butuhkan.