कार्य से परिचय: NSURL और NSString इतने महत्वपूर्ण क्यों हैं?
\n\nप्रत्येक iOS डेवलपर को देर-सबेर इस कार्य का सामना करना पड़ता है: आपके पास एक NSURL ऑब्जेक्ट है, लेकिन आपको उसमें से एक सामान्य स्ट्रिंग — NSString (या आधुनिक Swift में, बस String) प्राप्त करनी है। यह आसान लगता है? हालांकि, यहाँ कई छिपी हुई समस्याएँ हैं: गलत कैरेक्टर डिकोडिंग से लेकर URL के भागों के खो जाने तक।
Stack Overflow पर प्रश्न "Convert an NSURL to an NSString" ने हज़ारों बार देखा गया है — यह एक वास्तविक क्लासिक है। PythonLib में हमने इस विषय को गहराई से समझने का फैसला किया है, ताकि आप समाधान खोजने में कभी समय बर्बाद न करें। चलिए शुरू करते हैं!
\n\nSwift में NSURL और NSString क्या हैं?
\n\nकोड पर जाने से पहले, आइए जल्दी से याद करें कि हम किसके साथ काम कर रहे हैं।
\n\nNSURL एक ऑब्जेक्ट है जो एक यूनिफाइड रिसोर्स लोकेटर (URL) का प्रतिनिधित्व करता है। यह पतों को घटकों में विभाजित कर सकता है: स्कीम, होस्ट, पथ, पैरामीटर इत्यादि। Swift में, इसकी जगह मूल प्रकार URL ने ले ली है, लेकिन NSURL अभी भी पुराने कोड, Core Foundation और Objective-C लाइब्रेरीज़ के साथ काम करते समय सक्रिय रूप से उपयोग किया जाता है।
NSString Objective-C में एक स्ट्रिंग है, जो Swift में स्वचालित रूप से String प्रकार में ब्रिज (bridges) हो जाती है। इसलिए, जब हम "NSURL को NSString में बदलना" कहते हैं, तो हमें वास्तव में या तो String या NSString? मिलता है।
NSURL को NSString में बदलने के मुख्य तरीके
\n\nआइए तीन मुख्य दृष्टिकोणों पर चर्चा करें। उनमें से प्रत्येक विभिन्न परिदृश्यों के लिए उपयुक्त है।
\n\n1. absoluteString प्रॉपर्टी का उपयोग करना
\n\nसबसे लोकप्रिय और सरल तरीका। absoluteString प्रॉपर्टी सभी घटकों सहित पूर्ण URL स्ट्रिंग लौटाती है।
import Foundation\n\nlet url = NSURL(string: "https://pythonlib.ru/swift-guide?page=1&lang=ru")!\nlet urlString = url.absoluteString\n\nprint(urlString) // "https://pythonlib.ru/swift-guide?page=1&lang=ru"\n\nमहत्वपूर्ण: absoluteString एक स्ट्रिंग लौटाता है जिसमें प्रतिशत एन्कोडिंग (percent-encoding) हो सकती है। उदाहरण के लिए, स्पेस %20 के रूप में दिखाई देंगे, और सिरिलिक वर्ण %D0%9F के रूप में।
2. relativeString प्रॉपर्टी
\n\nयदि आपका URL सापेक्ष है (इसमें स्कीम और होस्ट शामिल नहीं है), तो relativeString केवल सापेक्ष भाग लौटाएगा।
let baseURL = NSURL(string: "https://pythonlib.ru")!\nlet relativeURL = NSURL(string: "swift-guide", relativeTo: baseURL)!\n\nlet absolute = relativeURL.absoluteString\nlet relative = relativeURL.relativeString\n\nprint(absolute) // "https://pythonlib.ru/swift-guide"\nprint(relative) // "/swift-guide"\n\nयह विधि विशेष रूप से तब उपयोगी होती है जब आप बेस URL और सापेक्ष पथों के साथ काम कर रहे हों।
\n\n3. URL घटकों को मैन्युअल रूप से पार्स करना
\n\nकभी-कभी आपको पूर्ण URL की नहीं, बल्कि उसके केवल एक भाग की आवश्यकता होती है: पथ, होस्ट या पैरामीटर। इसके लिए NSURLComponents प्रॉपर्टीज़ या सीधे NSURL का उपयोग करें।
let url = NSURL(string: "https://pythonlib.ru/ios/guide?query=swift#section1")!\n\nlet scheme = url.scheme ?? ""\nlet host = url.host ?? ""\nlet path = url.path ?? ""\nlet query = url.query ?? ""\nlet fragment = url.fragment ?? ""\n\nprint("स्कीम: \\(scheme)")\nprint("होस्ट: \\(host)")\nprint("पथ: \\(path)")\nprint("पैरामीटर: \\(query)")\nprint("एंकर: \\(fragment)")\n\nयह दृष्टिकोण आपको इस बात पर अधिकतम नियंत्रण देता है कि आप वास्तव में क्या निकाल रहे हैं।
\n\nसामान्य गलतियाँ और उनसे कैसे बचें
\n\nअनुभवी डेवलपर भी कभी-कभी सरल चीज़ों पर फिसल जाते हैं। NSURL को NSString में बदलने में ये तीन सबसे आम समस्याएँ हैं।
गलती 1: ऑप्शनलिटी के बारे में भूलना
\n\nNSURL(string:) एक ऑप्शनल प्रकार NSURL? लौटाता है। यदि स्ट्रिंग