ได้รับ:
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
พารามิเตอร์ (และaction
) ของประเภทAction?
และเก็บไว้ด้วย@escaping
?
การเปลี่ยนชนิดจะทำให้เกิดข้อผิดพลาดต่อไปนี้:
คุณลักษณะ @escaping ใช้กับประเภทฟังก์ชันเท่านั้น
การลบ@escaping
แอ็ตทริบิวต์โค้ดจะคอมไพล์และรัน แต่ดูเหมือนจะไม่ถูกต้องเนื่องจากการcompletion
ปิดกำลังหลบหนีขอบเขตของฟังก์ชัน
@escaping
แอตทริบิวต์ที่คอมไพล์รหัสและวิ่ง" - นั่นเพราะที่อธิบายไว้ในSR-2444 ,Action?
เป็นตามค่าเริ่มต้นการหลบหนี ดังนั้นการลบ@escaping
เมื่อใช้การปิดที่เป็นตัวเลือกทำให้ได้สิ่งที่คุณต้องการ