परिचय: append भी कोड को क्यों तोड़ सकता है?
\n\nऐसा लगता है कि Swift में किसी ऐरे में तत्व जोड़ने से आसान कुछ और हो सकता है? हम लिखते हैं array.append(newElement) — और काम हो जाता है। हालाँकि, Stack Overflow पर हज़ारों व्यूज़ को देखते हुए, यह प्रतीत होने वाली सरल क्रिया शुरुआती और अनुभवी डेवलपर्स दोनों को हैरान कर देती है।
इस लेख में हम केवल यह नहीं दिखाएंगे कि Swift में ऐरे में तत्व कैसे जोड़ें। हम 5 सबसे सामान्य और कपटी गलतियों का विश्लेषण करेंगे जो सरल append को सिरदर्द में बदल देती हैं। आप जानेंगे कि क्यों कंपाइलर सही दिखने वाले कोड पर आपत्ति कर सकता है, ऐरे की सीमा से बाहर कैसे न जाएँ, और append और insert में क्या अंतर है। चलिए शुरू करते हैं!
गलती #1: सख्त टाइपिंग के बारे में भूल जाना
\n\nSwift एक सख्त टाइपिंग वाली भाषा है। इसका मतलब है कि [Int] के रूप में घोषित ऐरे एक स्ट्रिंग को स्वीकार नहीं करेगा, भले ही वह संख्या जैसी दिखती हो। यह उन लोगों के लिए एक सामान्य जाल है जो Python या JavaScript से आए हैं।
समस्या: टाइप बेमेल
\n\nvar numbers: [Int] = [1, 2, 3]\n// कंपाइलेशन त्रुटि: 'String' प्रकार के मान को अपेक्षित तर्क प्रकार 'Int' में परिवर्तित नहीं किया जा सकता\nnumbers.append("4")\n\n\nसमाधान: टाइप कास्टिंग
\n\nहमेशा डेटा को स्पष्ट रूप से ऐरे के प्रकार में बदलें। इनिशियलाइज़र या स्पष्ट रूपांतरण का उपयोग करें:
\n\nvar numbers: [Int] = [1, 2, 3]\nif let intValue = Int("4") {\n numbers.append(intValue) // ✅ काम करता है: numbers = [1, 2, 3, 4]\n}\n\n// या स्ट्रिंग ऐरे के लिए:\nvar strings: [String] = ["a", "b"]\nstrings.append(String(42)) // ✅ "42" को स्ट्रिंग के रूप में जोड़ा गया\n\n\nसुझाव: यदि आप बाहरी स्रोत (API, उपयोगकर्ता इनपुट) से तत्व जोड़ रहे हैं, तो हमेशा as? के साथ प्रकार की जाँच करें या nil को फ़िल्टर करने के लिए compactMap का उपयोग करें।
गलती #2: insert का उपयोग करते समय Index out of range
\n\nविधि insert(_:at:) आपको किसी भी स्थिति में तत्व डालने की अनुमति देती है। लेकिन यदि आप ऐरे में तत्वों की संख्या से अधिक इंडेक्स निर्दिष्ट करते हैं, तो एप्लिकेशन Fatal error: Index out of range के साथ क्रैश हो जाएगा।
समस्या: ऐरे की सीमा से बाहर डालना
\n\nvar fruits = ["सेब", "केला"]\n// 2 तत्वों का ऐरे: इंडेक्स 0 और 1\n// त्रुटि! इंडेक्स 5 मौजूद नहीं है\nfruits.insert("संतरा", at: 5)\n\n\nसमाधान: सीमा जाँच और सुरक्षित विस्तार
\n\nइस त्रुटि से बचने के दो तरीके हैं:
\n- \n
- इंडेक्स जाँच: सुनिश्चित करें कि इंडेक्स 0 से
array.count(insert के लिए शामिल) की सीमा में है। \n - स्वचालित पूरक: यदि आप सीमा से बाहर जाने पर अंत में तत्व डालना चाहते हैं, तो
appendके साथ तर्क का उपयोग करें। \n
var fruits = ["सेब", "केला"]\n\n// सुरक्षित विकल्प 1: जाँच\nlet index = 5\nif index >= 0 && index <= fruits.count {\n fruits.insert("संतरा", at: index)\n} else {\n // यदि इंडेक्स count से अधिक है, तो बस अंत में जोड़ें\n fruits.append("संतरा")\n}\nprint(fruits) // ["सेब", "केला", "संतरा"]\n\n// सुरक्षित विकल्प 2: एक्सटेंशन\nextension Array {\n mutating func safeInsert(_ element: Element, at index: Int) {\n if index >= 0 && index <= self.count {\n self.insert(element, at: index)\n } else {\n self.append(element)\n }\n }\n}\n\nfruits.safeInsert("कीवी", at: 100) // ✅ अंत में जोड़ेगा\n\n\nगलती #3: append और += के बीच भ्रम
\n\nऑपरेटर += भी तत्व जोड़ सकता है, लेकिन इसका व्यवहार append से भिन्न होता है। मुख्य अंतर: += संग्रह के साथ काम करता है, न कि एकल तत्वों के साथ।
समस्या: अंतर्निहित ऐरे निर्माण
\n\nvar list = [1, 2, 3]\nlis