Swift में स्ट्रिंग्स का नया जीवन: अलविदा substring, नमस्ते slicing

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift में deprecated से डरना कैसे छोड़ें और slicing से प्यार कैसे करें

\n\n

यदि आपने कभी Swift में कोड लिखा है और स्ट्रिंग का एक भाग काटने का प्रयास किया है, तो आपने निश्चित रूप से इस डरावने संदेश का सामना किया होगा: 'substring(to:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator। यह एक सजा की तरह लगता है? वास्तव में यह स्ट्रिंग्स के साथ काम करने की एक नई, अधिक सुरक्षित और शक्तिशाली दुनिया का निमंत्रण है। आइए समझते हैं कि क्या हुआ, Apple ने परिचित API को क्यों बदलने का फैसला किया और Swift 4 और उसके बाद स्ट्रिंग्स को सही तरीके से कैसे "काटें"।

\n\n

substring अतीत की बात क्यों हो गया?

\n\n

पुराना और अच्छा substring(to:) काम करता था, लेकिन यह... बहुत समझदार नहीं था। यह एक नया Substring ऑब्जेक्ट लौटाता था, जो मूल स्ट्रिंग में एक "खिड़की" मात्र था। इससे भ्रम पैदा होता था: आप सोचते थे कि आप एक स्वतंत्र स्ट्रिंग के साथ काम कर रहे हैं, जबकि वास्तव में आप पुरानी मेमोरी का एक संदर्भ पकड़े हुए थे। Swift 4 में व्यवस्था लाने का फैसला किया गया: अब सबस्ट्रिंग के सभी ऑपरेशन Substring प्रकार लौटाते हैं, और पूर्ण स्ट्रिंग प्राप्त करने के लिए परिणाम को स्पष्ट रूप से कन्वर्ट करना होता है। क्या यह जटिल लगता है? व्यवहार में, यह कहीं अधिक स्पष्ट और सुरक्षित है।

\n\n

मिलिए: String slicing subscript से

\n\n

नया दृष्टिकोण सबस्क्रिप्ट (subscripts) और रेंज (ranges) का उपयोग करता है। substring(to:), substring(from:) और substring(with:) विधियों के बजाय, अब आप कोड लिखते हैं जो ऐरे के साथ काम करने जैसा दिखता है। यहाँ एक बुनियादी समानता है:

\n\n
let fullString = "Привет, мир!"\n// पुराना तरीका (deprecated)\n// let oldResult = fullString.substring(to: fullString.index(fullString.startIndex, offsetBy: 6))\n\n// नया तरीका\nlet newResult = fullString[..<fullString.index(fullString.startIndex, offsetBy: 6)]\nprint(newResult) // "Привет"\n
\n\n

ऑपरेटर ..< देख रहे हैं? यह वही partial range from operator है - "शुरुआत से निर्दिष्ट इंडेक्स तक, उसे शामिल किए बिना" एक आंशिक रेंज। शक्तिशाली? बिल्कुल।

\n\n

नए दृष्टिकोण के तीन स्तंभ: from, to, through

\n\n

आइए तीन मुख्य परिदृश्यों को समझते हैं जो पहले substring विधियों द्वारा कवर किए जाते थे।

\n\n

1. substring(to:) → prefix(upTo:) या आंशिक रेंज

\n

किसी निश्चित इंडेक्स तक सब कुछ लेना चाहते हैं? ..< (half-open range) या prefix(upTo:) विधि का उपयोग करें:

\n\n
let str = "Hello, Swift"\nlet index = str.firstIndex(of: ",") ?? str.endIndex\n\n// सबस्क्रिप्ट के माध्यम से विकल्प\nlet result1 = str[..<index]\nprint(result1) // "Hello"\n\n// विधि के माध्यम से विकल्प\nlet result2 = str.prefix(upTo: index)\nprint(result2) // "Hello"\n
\n\n

2. substring(from:) → suffix(from:) या आंशिक रेंज

\n

इंडेक्स से अंत तक सब कुछ लेना है? शुरुआत को छोड़कर ... (closed range) का उपयोग करें:

\n\n
let startIndex = str.index(str.startIndex, offsetBy: 7)\nlet result3 = str[startIndex...]\nprint(result3) // "Swift"\n\n// या विधि के माध्यम से\nlet result4 = str.suffix(from: startIndex)\nprint(result4) // "Swift"\n
\n\n

3. substring(with:) → सामान्य रेंज

\n

कोई विशिष्ट टुकड़ा काटना चाहते हैं? बस रेंज निर्दिष्ट करें:

\n\n
let range = str.index(str.startIndex, offsetBy: 7)..<str.endIndex\nlet result5 = str[range]\nprint(result5) // "Swift"\n\n// या closed range के माध्यम से\nlet closedRange = str.index(str.startIndex, offsetBy: 7)...str.index(before: str.endIndex)\nlet result6 = str[closedRange]\nprint(result6) // "Swift"\n
\n\n

ध्यान दें: ये सभी ऑपरेशन Substring लौटाते हैं, String नहीं। यदि आपको पूर्ण स्ट्रिंग चाहिए, तो बस परिणाम को String() में लपेटें:

\n\n
let newString = String(result1)\nprint(type(of: newString)) // String\n
\n\n

prefix और suffix का क्या? वे deprecated नहीं हैं!

\n\n

हाँ, prefix(_:), suffix

ब्लॉग

पुस्तक अनुशंसाएँ