परिचय: "पेच", जो हर Swift-डेवलपर का इंतजार करता है
\n\nएक स्थिति की कल्पना करें: आप Swift में आत्मविश्वास से कोड लिख रहे हैं, सब कुछ सुचारू रूप से चल रहा है, और तभी आपको एक स्ट्रिंग से पहले तीन अक्षर लेने की आवश्यकता है। आप बिना सोचे-समझे कुछ ऐसा लिखते हैं myString[0..<3] — और आपको मिलता है... एक कंपाइलेशन एरर। परिचित लगता है?
स्वागत है Swift में String substring की दुनिया में। यह उन विषयों में से एक है जो शुरुआती और यहां तक कि अन्य भाषाओं से आने वाले अनुभवी डेवलपर्स के लिए भी वास्तविक दर्द का कारण बनता है। Stack Overflow पर "How does String substring work in Swift" प्रश्न ने हजारों बार देखा गया है — और यह कोई संयोग नहीं है।
\n\nइस लेख में, हम यह समझेंगे कि Swift सबस्ट्रिंग के साथ काम करने में इतना "अजीब" क्यों है, Swift में substring का सही तरीके से उपयोग कैसे करें, और नवीनतम संस्करणों में कौन सी नई सुविधाएँ आई हैं। चलिए शुरू करते हैं!
\n\nSwift स्ट्रिंग का एक टुकड़ा आसानी से काटने की अनुमति क्यों नहीं देता?
\n\nअधिकांश भाषाओं (Python, JavaScript, C#) में, स्ट्रिंग केवल वर्णों की एक सरणी है। सबस्ट्रिंग चाहिए? str[0:3] लिखें और परिणाम प्राप्त करें। Swift में सब कुछ अलग है।
इसका कारण Unicode के साथ काम करना है। Swift में स्ट्रिंग्स केवल बाइट्स या ASCII वर्ण नहीं हैं। वे ग्रैफेम क्लस्टर (grapheme clusters) से बने होते हैं। एक वर्ण जो उपयोगकर्ता देखता है (उदाहरण के लिए, "é" या "👍🏽"), कई Character या कई Unicode.Scalar ले सकता है। कल्पना करें कि आप ऐसे क्लस्टर के बीच में स्ट्रिंग को काट रहे हैं — आपको दूषित डेटा मिलेगा।
इसलिए Swift पूर्णांकों के बजाय इंडेक्स (String.Index) का उपयोग करता है। यह गारंटी देता है कि आप कभी भी किसी वर्ण को आधा नहीं काटेंगे।
मूल बातें: String.Index और सबस्ट्रिंग का सरल निष्कर्षण
\n\nआइए एक बुनियादी उदाहरण से शुरू करते हैं। मान लीजिए कि हमारे पास एक स्ट्रिंग है:
\n\nlet fullString = "Привет, Swift!"\n// हम "Swift" शब्द लेना चाहते हैं\nlet startIndex = fullString.index(fullString.startIndex, offsetBy: 8)\nlet endIndex = fullString.index(fullString.startIndex, offsetBy: 13)\nlet substring = fullString[startIndex..<endIndex]\nprint(substring) // आउटपुट: "Swift"\n\nध्यान दें: substring का प्रकार Substring है, String नहीं। यह एक महत्वपूर्ण अंतर है। Substring मूल स्ट्रिंग में एक "खिड़की" है। यह डेटा की प्रतिलिपि नहीं बनाता है, बल्कि केवल मूल स्ट्रिंग के मेमोरी के एक हिस्से को संदर्भित करता है। यह अत्यधिक कुशल है, लेकिन अगर मूल स्ट्रिंग बड़ी है और सबस्ट्रिंग छोटी है तो मेमोरी लीक हो सकती है।
Substring को पूर्ण String में बदलने के लिए, बस इनिशियलाइज़र का उपयोग करें:
let newString = String(substring)\nprint(newString) // "Swift"\n\nसिंटैक्टिक शुगर: RangeExpression
\n\nहर बार index(offsetBy:) लिखना थकाऊ है। सौभाग्य से, Swift RangeExpression का उपयोग करके छोटे रूपों की अनुमति देता है।
ऑपरेटर ... (ClosedRange)
\nlet str = "Hello, World!"\nif let range = str.range(of: "World") {\n let worldSubstring = str[range]\n print(worldSubstring) // "World"\n}\n\nआंशिक रेंज (Partial Range)
\nकिसी निश्चित इंडेक्स तक या उसके बाद सब कुछ लेना चाहते हैं? आसान है:
\nlet text = "Swift Programming"\nlet prefix = text[..<text.index(text.startIndex, offsetBy: 5)]\nprint(prefix) // "Swift"\n\nlet suffix = text[text.index(text.startIndex, offsetBy: 6)...]\nprint(suffix) // "Programming"\n\nध्यान दें: prefix और suffix भी Substring हैं।
अंतर्निहित विधियाँ: prefix, suffix, dropFirst, dropLast
\n\nSwift सुविधाजनक विधियाँ प्रदान करता है जो मैन्युअल रूप से इंडेक्स की गणना करने से बचाती हैं। ये Substring लौटाती हैं।
- \n
str.prefix(5)— पहले 5 वर्ण। \n str.suffix(3)— अंतिम 3 वर्ण।ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें
PHP में POST अनुरोध कैसे भेजें: उदाहरणों के साथ 4 कार्यशील तरीके
Rust Roadmap 2025: शून्य से प्रोडक्शन तक 6 महीने में
C# में एक फ़ील्ड के अनुसार Distinct: ऑब्जेक्ट्स के डुप्लिकेट कैसे हटाएं
PHP एप्लिकेशन को कैसे सुरक्षित करें: सुरक्षित प्रमाणीकरण के लिए संपूर्ण गाइड
C# परियोजनाओं के लिए CI/CD: उन्नत स्तर पर GitHub Actions