Swift Academy · पाठ

क्लोज़र कैप्चर सूचियाँ और [weak self]

ऑब्जेक्ट को मज़बूती से कैप्चर करने से क्लोज़र को रोकने के लिए कैप्चर सूचियों का उपयोग करें।

पाठ 4, कुल 4 में से12 चरण

क्लोज़र कैप्चर सूचियाँ और [weak self], CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्वागत

क्लोज़र अपने आसपास के दायरे से चर कैप्चर करते हैं। कैप्चर सूचियाँ (`[weak self]`, `[unowned self]`, `[value]`) यह नियंत्रित करती हैं कि ये कैप्चर ठीक किस तरह किए जाएँ।

डिफ़ॉल्ट मज़बूत कैप्चर

```swift var name = "Alice" let greet = { print("Hello, \(name)") } name = "Bob" greet() // "Hello, Bob" — closure sees current value ``` डिफ़ॉल्ट रूप से, क्लोज़र चर के *संदर्भ* कैप्चर करते हैं।

कैप्चर सूची की मूल बातें

```swift var count = 10 let snapshot = { [count] in print(count) } // captures value count = 99 snapshot() // 10 — snapshot of count at capture time ``` `[]` में मान प्रकार सूचीबद्ध करने पर क्लोज़र बनते समय उस मान की प्रतिलिपि बन जाती है।

[weak self] पैटर्न

```swift class API { func fetch(completion: @escaping () -> Void) { ... } } class VC { func load() { api.fetch { [weak self] in guard let self else { return } // self might be nil by now self.updateUI() } } } ```

विस्तारित जीवनकाल वाला guard let self

स्विफ्ट 5.3+: नाम छिपाए बिना guard के अंदर `self` को फिर से बाँधें: ```swift { [weak self] in guard let self else { return } // 'self' is now strong within this block doA() doB() doC() } ```

[unowned self] कब सुरक्षित है

```swift button.addTarget(self, action: #selector(tap), for: .touchUpInside) // If the button's closure is guaranteed not to outlive self: let action: () -> Void = { [unowned self] in self.handleTap() } ```

कई मानों को कैप्चर करना

```swift let base = 100 let multiplier = 2 let compute = { [base, multiplier] in base * multiplier } print(compute()) // 200 ``` एक ही सूची में कई मानों को अल्पविराम से अलग करके कैप्चर करें।

नामित बाइंडिंग वाली कैप्चर सूची

```swift let myService = service // rename in capture list: let handler = { [service = myService] in service.process() } ``` किसी नए नाम के अंतर्गत किसी विशिष्ट स्नैपशॉट को कैप्चर करने में उपयोगी।

एस्केपिंग बनाम नॉन-एस्केपिंग

• `@escaping` क्लोज़र को संग्रहीत किया जा सकता है और फ़ंक्शन के लौटने के बाद बुलाया जा सकता है → चक्र का जोखिम • नॉन-एस्केपिंग क्लोज़र को फ़ंक्शन के लौटने से पहले बुलाया जाता है → चक्र का कोई जोखिम नहीं ```swift func apply(_ f: () -> Void) { f() } // non-escaping, no [weak] needed func later(_ f: @escaping () -> Void) { queue.async { f() } } // escaping ```

कैप्चर समस्याओं की डीबगिंग

यदि आपको चक्र होने का संदेह हो: 1. क्लास में `deinit { print("deallocated") }` जोड़ें 2. दूसरे पृष्ठ पर जाएँ या इंस्टेंस को शून्य पर सेट करें 3. यदि deinit प्रिंट नहीं होता → चक्र मौजूद है फिर उस क्लास के क्लोज़र में `[weak self]` जोड़ें।

त्वरित जाँच

कैप्चर सूची में `[weak self]` क्या करता है?

पुनरावलोकन

मुख्य बातें: • क्लोज़र डिफ़ॉल्ट रूप से संदर्भ कैप्चर करते हैं • कैप्चर सूची `[value]` निर्माण के समय मान प्रकारों की प्रतिलिपि बनाती है • `[weak self]` — रिटेन नहीं करता, अपने-आप शून्य हो जाता है, `guard let self` का उपयोग करें • `[unowned self]` — रिटेन नहीं करता, शून्य के लिए सुरक्षित नहीं • `@escaping` क्लोज़र को कैप्चर सूचियों की ज़रूरत होती है; नॉन-एस्केपिंग क्लोज़र को आम तौर पर नहीं पाठ्यक्रम पूरा हुआ! अगला विषय: स्विफ्ट में फंक्शनल प्रोग्रामिंग
शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

अक्सर पूछे जाने वाले प्रश्न

क्या “क्लोज़र कैप्चर सूचियाँ और [weak self]” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “क्लोज़र कैप्चर सूचियाँ और [weak self]” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“क्लोज़र कैप्चर सूचियाँ और [weak self]” में मैं क्या सीखूँगा?

ऑब्जेक्ट को मज़बूती से कैप्चर करने से क्लोज़र को रोकने के लिए कैप्चर सूचियों का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“क्लोज़र कैप्चर सूचियाँ और [weak self]” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. ARC संदर्भों की गणना कैसे करता है
  2. रिटेन चक्र: कारण और पहचान
  3. weak और unowned संदर्भ
  4. क्लोज़र कैप्चर सूचियाँ और [weak self]
← Swift Academy पर वापस जाएँ