2014-07-22 4 views
11

! का नाम हमेशा मुझे भ्रमित करता है: इसे 'निस्संदेह अनचाहे वैकल्पिक' कहा जाता है। हालांकि, इसके बारे में क्या निहित है? लागू का मतलब है "हालांकि स्पष्ट रूप से व्यक्त नहीं किया गया है।" हालांकि, ! स्पष्ट रूप से अपना उद्देश्य व्यक्त नहीं कर रहा है? ! जोड़ना स्पष्ट नहीं करता है जिसे हम पूरा करने की कोशिश कर रहे हैं?क्यों है! स्विफ्ट में 'स्पष्ट रूप से' अनचाहे वैकल्पिक के बजाय 'अंतर्निहित' कहा जाता है?

+0

http://en.wikipedia.org/wiki/Explicit_and_implicit_methods है इसका इस्तेमाल करने की कोशिश – XaxD

+0

अंतर्निहित और स्पष्ट रूप से उनके उपयोग के साथ करना है, न कि उनकी घोषणाओं। आप आगे बढ़ते हैं और 'वैकल्पिक ' को अनचाहे नहीं करने का प्रयास करते हैं और इसे सादा 'टी' की तरह उपयोग करते हैं और मेरे पास वापस आते हैं। – CodaFi

+0

महान सवाल। मैं इसके बारे में सोच रहा था। मैं ऐप्पल डेवलपर्स से पूछा था :) – SoftDesigner

उत्तर

6

सामान्य वैकल्पिक

var foo : Foo? = Foo() 
foo!.doSomething() // explicitly unwrap it and call the method 

उलझाव से लपेटा न वैकल्पिक

var foo : Foo! = Foo() 
foo.doSomething() // implicitly unwrap it and call the method just like it is not optional 

दोनों मामले में, आप एक वैकल्पिक (? या !) घोषित करने के लिए कुछ की जरूरत है। स्पष्ट रूप से अनचाहे वैकल्पिक अधिक जोड़ नहीं है। लेकिन जब आप इसका इस्तेमाल करते हैं तो आप अनचाहे ऑपरेटर को छोड़ सकते हैं।

18

स्विफ्ट में, विस्मयादिबोधक चिह्न (!) का दो अलग-अलग तरीकों से उपयोग किया जाता है। एक को Forced Unwrapping कहा जाता है। यह वह जगह है आप एक चर एक वैकल्पिक रूप में परिभाषित किया है और आप मूल रूप से जोर देने के लिए है कि मूल्य नहीं के बराबर है, ताकि आप इसका इस्तेमाल कर सकते हैं जैसे कि यह एक वैकल्पिक नहीं थे नहीं है चाहते हैं जब:

var optionalName: String? = "World" 
if optionalName != nil { 
    sayHelloTo(optionalString!) 
} 

एक वैकल्पिक तरीका है कि आप का वर्णन कर सकता है "फोर्सड अनवरपिंग" "स्पष्टीकरण अनवरिपिंग" है, लेकिन मजबूर अतिरिक्त संकेत जोड़ता है कि अगर आप "अनवर्र को फोर्स" करने का प्रयास करते हैं तो यह पूरा प्रोग्राम दुर्घटनाग्रस्त हो जाएगा।

दूसरी बात यह है कि जब आप वास्तव में एक चर के प्रकार की घोषणा कर रहे हैं और इसे Implicitly Unwrapped Optional कहा जाता है। यह तब होता है जब आप एक वैरिएबल घोषित करना चाहते हैं जो तकनीकी रूप से वैकल्पिक है, लेकिन आप इसका इलाज करेंगे जैसे कि यह वैकल्पिक नहीं है। हर बार जब आप इस उलझाव से लपेटा न वैकल्पिक उपयोग करें, यह वास्तव में है, "सेना unwrapping" कर रहा ऊपर वर्णित:

var name: String! = "World" 
if name != nil { 
    sayHelloTo(name) 
} 

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

की तरह "मजबूर unwrapping"

एक "उलझाव से लपेटा न वैकल्पिक" अभी भी पूरे कार्यक्रम दुर्घटना होगा यदि आप जब यह शून्य

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