2016-08-27 8 views
5

जब भी हमें स्विफ्ट में वैकल्पिक मान के साथ कुछ जोड़ने की आवश्यकता होती है, तो हमें वैकल्पिक पर नहीं, बल्कि वैकल्पिक "अंदर" मूल्य पर काम करने के लिए इसे खोलने की आवश्यकता होती है।कास्ट वैकल्पिक मान टाइप करें

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 

नोट दूसरी पंक्ति पर विस्मयादिबोधक चिह्न।

क्या प्रकार कास्ट ऑपरेटर वैकल्पिक रूप से वैकल्पिक और गैर विकल्प पर कार्य करता है?

+0

शायद यह सब के बाद समझ में आता है। एक शून्य वैकल्पिक खोलने के लिए एक रनटाइम त्रुटि है। और हम वैकल्पिक (किसी भी) से स्ट्रिंग तक कास्टिंग नहीं कर रहे हैं, लेकिन वैकल्पिक (किसी भी) से वैकल्पिक (स्ट्रिंग) तक। – weenzeel

उत्तर

1

as? ऑपरेटर यदि संभवतः कर सकता है तो एक कास्ट बनाता है, या या तो जाली ऑब्जेक्ट या nil देता है। यह शून्य मूल्यों को भी संभालता है, ताकि sneakyString शून्य न हो, तो आप इसे String पर डालने में सक्षम नहीं होते और कलाकार असफल हो जाते। वही व्यवहार जैसे कि यह गैर-शून्य था लेकिन String पर जाति योग्य नहीं था।

दूसरे शब्दों में, आपको ! की आवश्यकता नहीं है क्योंकि as? स्वचालित रूप से शून्य मानों को संभालता है।

+0

हाँ नील केस थोड़ा और तार्किक है। मेरे प्रश्न को यह इंगित करने के लिए संपादित किया गया है कि ऑपरेटर एक स्ट्रिंग स्ट्रक्चर पर काम नहीं कर रहा है, लेकिन एक स्ट्रिंग के साथ एक संलग्न मूल्य के रूप में एक enum पर। क्या आपको पता है कि यह दस्तावेज है या नहीं? – weenzeel

संबंधित मुद्दे