Verilen:
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()
completion
Parametre (ve action
) türünü yapmanın Action?
ve saklamanın bir yolu var @escaping
mı?
Türün değiştirilmesi aşağıdaki hatayı verir:
@escaping niteliği yalnızca işlev türleri için geçerlidir
Çıkarma @escaping
niteliğini, kod derler ve ishal, ancak o zamandan beri doğru gibi görünmüyor completion
kapatma fonksiyonunun kapsamını kaçıyor.
@escaping
niteliği, kod derler ve çalışır" - açıklandığı gibi, çünkü en SR-2444 ,Action?
kaçan, varsayılan olarak vardır. Bu nedenle,@escaping
isteğe bağlı kapağı kullanırken çıkarmak , ihtiyacınız olanı başarır.