दिलचस्प पोस्ट
सीकेके का उपयोग करते हुए जीसीसी और क्लैंग / एलएलवीवी के बीच स्विचिंग MySQL पिवोट टेबल कॉलम डेटा पंक्तियों के रूप में दिए गए स्ट्रैड / चरणज़ के साथ संकीर्ण सरणी से संकीर्णता लेना क्या उपेक्षित बाल प्रक्रियाएं एक ही सेमाफोर का उपयोग करती हैं? jQuery मोबाइल: फ़ॉर्म डेटा को सही ढंग से कैसे सबमिट करें क्यों Jquery केवल पहली div तत्व को प्रभावित करता है? मैं परिवर्तनों के लिए DOM को कैसे मॉनिटर कर सकता हूं? वाई-अक्ष की सीमा matplotlib में सेट करना आराम एपीआई – डीटीओ या नहीं? एचईएल टैग को विभाजित करने के लिए रेगेक्स सीएसएस मिनेफ़ायर के लिए कोई सिफारिशें? फोरेक का प्रदर्शन, लैम्ब्डा के साथ array_map और स्थिर कार्य के साथ array_map Html पर नए टैब में लिंक कैसे खोलें? बाइंडिंग लिस्ट <T> में डाटाग्रीड दृश्य में WinForm 2 sed कमांडों के संयोजन

स्विफ्ट 3 ग़लत स्ट्रिंग इंटरप्रोलेशन जिसमें अन्तर्निहित अवांछित विकल्प हैं

स्विफ्ट 3 में स्ट्रिंग प्रक्षेप का उपयोग करते समय क्यों अनवरहित विकल्प नहीं उठाए जाते हैं?

उदाहरण : खेल के मैदान में निम्नलिखित कोड चलाना

var str: String! str = "Hello" print("The following should not be printed as an optional: \(str)") 

इस उत्पादन का उत्पादन करता है:

 The following should not be printed as an optional: Optional("Hello") 

बेशक मैं + ऑपरेटर के साथ तार जोड़ सकते हैं, लेकिन मैं अपने ऐप में बहुत ज्यादा हर जगह स्ट्रिंग प्रक्षेप का उपयोग कर रहा हूं जो अब इस (बग के कारण) अब काम नहीं करता है?

क्या यह भी एक बग है या क्या उन्होंने जानबूझकर स्विफ्ट 3 के साथ इस व्यवहार को बदल दिया?

वेब के समाधान से एकत्रित समाधान "स्विफ्ट 3 ग़लत स्ट्रिंग इंटरप्रोलेशन जिसमें अन्तर्निहित अवांछित विकल्प हैं"

एसई -0054 के अनुसार, ImplicitlyUnwrappedOptional अब एक अलग प्रकार नहीं है। इसके बजाय, यह अब एक नियमित Optional – यह सिर्फ एक विशेषता है जो कम्पाइलर को उन स्थितियों में खोलने को मजबूर करने की अनुमति देता है जहां इसे एक के रूप में चेक नहीं किया जा सकता

प्रस्ताव के अनुसार (जोर दिया मेरा):

अगर अभिव्यक्ति स्पष्ट रूप से एक मजबूत वैकल्पिक प्रकार के साथ चेक की जा सकती है, तो यह हो जाएगा । हालांकि, यदि आवश्यक हो तो वैकल्पिक रूप से मजबूर करने के लिए टाइप चेकर वापस आ जाएगा। इस व्यवहार का असर यह है कि किसी भी अभिव्यक्ति का परिणाम जिसे T! रूप में घोषित किया गया है T! या तो T प्रकार या T प्रकार होगा T?

इसका क्या मतलब यह है कि जब ये टाइप इंफॉर्मेशन की बात आती है, तो संकलक हमेशा एक वैकल्पिक के रूप में एक अनपेक्षित अवांछित वैकल्पिक टाइपिंग का एहसास करेगा, बजाय इसे खोलना। हालांकि, जब एक स्पष्ट प्रकार की एनोटेशन प्रदान की जाती है, तो यह व्यवहार ओवरराइड किया जाएगा।

जब यह प्रक्षेपण स्ट्रिंग की बात आती है, तो हुड के तहत संकलक स्ट्रिंग प्रक्षेप सेगमेंट का मूल्यांकन करने के लिए _ExpressibleByStringInterpolation प्रोटोकॉल से प्रारंभकर्ता को उपयोग करता है:

 /// Creates an instance containing the appropriate representation for the /// given value. /// /// Do not call this initializer directly. It is used by the compiler for /// each string interpolation segment when you use string interpolation. For /// example: /// /// let s = "\(5) x \(2) = \(5 * 2)" /// print(s) /// // Prints "5 x 2 = 10" /// /// This initializer is called five times when processing the string literal /// in the example above; once each for the following: the integer `5`, the /// string `" x "`, the integer `2`, the string `" = "`, and the result of /// the expression `5 * 2`. /// /// - Parameter expr: The expression to represent. init<T>(stringInterpolationSegment expr: T) 

चूंकि यह प्रारंभिक एक सामान्य पैरामीटर (कोई स्पष्ट प्रकार की एनोटेशन) का उपयोग नहीं करता है, तो संकलक पैरामीटर T को अनुमानित करने में सक्षम है, एक अन्तर्निहित अदृश्य वैकल्पिक इनपुट के लिए वैकल्पिक, इसलिए इसका अर्थ है कि यह बल बंद नहीं किया जाएगा

इसके विपरीत, यदि आप उदाहरण के लिए print() लेते हैं print() जो किसी Any पैरामीटर (एक स्पष्ट, यद्यपि सार प्रकार एनोटेशन) लेता है, तो संकलक IUO इनपुट को Optional प्रकार के रूप में समझा नहीं पाएगा , और इसलिए यह निहित रूप से बल दिया जाएगा unwrapped।

यदि आप स्ट्रिंग प्रक्षेप में उपयोग किए जाने पर IUO को बलपूर्वक खोलने के लिए चाहते हैं, तो आप केवल बल खोलने वाले ऑपरेटर का उपयोग कर सकते हैं ! :

 var str: String! str = "Hello" print("The following should not be printed as an optional: \(str!)") 

या आप अपने गैर-वैकल्पिक प्रकार (इस मामले में String ) को डालने के क्रम में संकलक को मजबूती से बलपूर्वक अपने लिए खोल सकते हैं:

 print("The following should not be printed as an optional: \(str as String)") 

दोनों, जो निश्चित रूप से दुर्घटनाग्रस्त हो जाएंगे, यदि str nil