दिया हुआ:
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
विशेषता को हटाते हुए, कोड संकलित करता है और चलाता है, लेकिन सही नहीं लगता है क्योंकि completion
क्लोजर फ़ंक्शन के दायरे से बच रहा है।
@escaping
विशेषता, कोड compiles और रन" - क्योंकि, में वर्णित के रूप कि के एसआर 2444 ,Action?
डिफ़ॉल्ट रूप से, से बचने के है। इसलिए,@escaping
वैकल्पिक क्लोजर का उपयोग करते समय हटाने से आपको जो चाहिए वह पूरा होता है।