जब भी हमें स्विफ्ट में वैकल्पिक मान के साथ कुछ जोड़ने की आवश्यकता होती है, तो हमें वैकल्पिक पर नहीं, बल्कि वैकल्पिक "अंदर" मूल्य पर काम करने के लिए इसे खोलने की आवश्यकता होती है।कास्ट वैकल्पिक मान टाइप करें
var optionalString:String? = "Hello"
optionalString!.append(" World!")
दूसरी पंक्ति पर विस्मयादिबोधक चिह्न नोट करें।
लेकिन वैकल्पिक प्रकार पर वैकल्पिक प्रकार कास्ट ऑपरेटर (एएस?) का उपयोग करते समय, किसी को वैकल्पिक को खोलने की आवश्यकता नहीं होती है, हम इसे वैकल्पिक रूप से उपलब्ध कराते हैं, और यह सिर्फ जादुई रूप से काम करता है।
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString as? String
दूसरी पंक्ति पर अनुपस्थित विस्मयादिबोधक चिह्न नोट करें।
जादू में थोड़ा और अधिक स्पष्ट है कि हम उसके उल्लेख है:
let sneakyString:Any? = Optional("Hello")
let notSoSneakyString = sneakyString as? String
इसका न कोई स्ट्रिंग हम कास्ट करने के लिए कोशिश कर रहे हैं लेकिन एक संबद्ध मूल्य के रूप में एक तार के साथ एक enum।
मैं उम्मीद होती है कि मैं यह करने के लिए होता है:
let sneakyString:Any? = "Hello!"
let notSoSneakyString = sneakyString! as? String
नोट दूसरी पंक्ति पर विस्मयादिबोधक चिह्न।
क्या प्रकार कास्ट ऑपरेटर वैकल्पिक रूप से वैकल्पिक और गैर विकल्प पर कार्य करता है?
शायद यह सब के बाद समझ में आता है। एक शून्य वैकल्पिक खोलने के लिए एक रनटाइम त्रुटि है। और हम वैकल्पिक (किसी भी) से स्ट्रिंग तक कास्टिंग नहीं कर रहे हैं, लेकिन वैकल्पिक (किसी भी) से वैकल्पिक (स्ट्रिंग) तक। – weenzeel