एक बंद बस मानकों के साथ एक समारोह कोष्ठक के अंदर ले जाया जाता है की सामग्री, फ़ंक्शन बॉडी से पैरामीटर को अलग करने के लिए कीवर्ड in
के साथ।
func myFunc(number: Int) -> Int {
let result = 3 * number
return result
}
let myClosure = { (number: Int) -> Int in
let result = 3 * number
return result
}
आप वास्तव में उन दोनों को बिल्कुल उसी तरह कॉल कर सकते हैं: दो निम्न उदाहरण बराबर कार्यों को परिभाषित
let x = myFunc(2) // x == 6
let y = myClosure(2) // y == 6
सूचना कैसे दूसरे उदाहरण वास्तव में पहले की तरह ही है, केवल में पहला उदाहरण, पैरामीटर (number: Int) -> Int
ब्रैकेट के बाहर हैं, और दूसरे उदाहरण में पैरामीटर ब्रैकेट के अंदर हैं, इसके बाद कीवर्ड in
है।
map
आपके उदाहरण में एक सरणी (numbers
) ले कर काम करता है और numbers
में प्रत्येक तत्व को बंद करने के फ़ंक्शन को लागू करने का नतीजा है। तो यदि numbers
[1, 2, 3]
है, तो ऊपर दिया गया उदाहरण 1
से शुरू होगा। यह क्लोजर फ़ंक्शन लागू करेगा जो का उत्पादन करेगा (cuz यह सब पहले तत्व से तत्व को 3 से गुणा करता है)। यह numbers
में प्रत्येक तत्व के लिए करता है, जब तक कि यह एक नई सरणी, [3, 6, 9]
उत्पन्न नहीं करता है।
यदि आप चाहते थे, तो आप ऊपर दिए गए फ़ंक्शन या उपर्युक्त बंद के नामों का उपयोग करके map
पर कॉल कर सकते हैं या इसे map
के अंदर स्पष्ट रूप से लिखकर कॉल कर सकते हैं। नीचे दिए गए उदाहरणों के सभी पूरी तरह से बराबर हैं:
let numbers = [1, 2, 3]
// Example 1
let times3 = numbers.map(myFunc) // times3 == [3, 6, 9]
// Example 2
let timesThree = numbers.map(myClosure) // timesThree == [3, 6, 9]
// Example 3
let xThree = numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result // xThree == [3, 6, 9]
})
ध्यान दें कि उदाहरण 3 उदाहरण 2 के रूप में एक ही है, केवल उदाहरण 3 में बंद बाहर स्पष्ट रूप से map
के अंदर लिखा जाता है, जबकि उदाहरण 2 में बंद सौंपा गया है निरंतर myClosure
कहा जाता है, और निरंतर map
पर आपूर्ति की गई है।
उम्मीद है कि यह मदद करता है - बंद मजेदार हैं, लेकिन भ्रमित हैं।
यह स्विफ्ट में बंद करने के लिए भी एक अच्छा परिचय है: http: //letvargo.mooo.com/a-beginners-guide-to-closures-in-swift/) –