2016-03-03 4 views
10

इस बयान from Apple document पर एक नज़र है? आप जानते हैं कि यह nil नहीं हो सकता है क्योंकि आप इसे 9 मान निर्दिष्ट कर रहे हैं? एक वैकल्पिक प्रकार (जैसा कि मैं समझता हूं) का उद्देश्य nil. को पकड़ने में सक्षम होना है optionalInt को इस कथन में nil रखने की आवश्यकता नहीं है। क्या कोई समझा सकता है?आप निरंतर मूल्य के साथ एक वैकल्पिक प्रकार का उपयोग क्यों करेंगे?</p> <pre><code>let optionalInt: Int? = 9 </code></pre> <p>क्यों आप इस निरंतर के लिए प्रकार के रूप में <code>Int?</code> का प्रयोग करेंगे:

+1

क्या आप ऐप्पल के दस्तावेज़ के पृष्ठ को लिंक कर सकते हैं जहां आपको कोड की उस पंक्ति को मिला? इससे हमें अधिक कुशलतापूर्वक उत्तर देने का संदर्भ मिलेगा। – RaphBlanchet

+1

@RaphBlanchet मुझे यह मिला; [वैकल्पिक विकल्प पेश करते समय इसे एक पंक्ति उदाहरण के रूप में उपयोग किया जाता है] (https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1.html#//apple_ref/doc/uid/TP40015214-CH3-SW1)। –

+0

यहां दस्तावेज़ का एक लिंक है: https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1।एचटीएमएल # // apple_ref/doc/uid/TP40015214-CH3-SW1 "वैकल्पिकInt" के लिए खोजें। यह सिर्फ एक पंक्ति उदाहरण है, लेकिन मुझे उम्मीद है कि उदाहरण समझेंगे। –

उत्तर

5

मुझे एक ऐसा मामला मिला जहां आप इसका उपयोग कर सकते हैं। यह एक खिंचाव का थोड़ा सा है, लेकिन यहां हम जाते हैं।

let x: Int? = whatever का उपयोग करने का एक कारण यह है कि यदि आपके पास ओवरलोडेड फ़ंक्शन है जहां पैरामीटर अलग-अलग प्रकार हैं, केवल एक ही वैकल्पिक है। उदाहरण के लिए:

func doSomething(x: Int) 
{ 
    print("\(x) is an Int") 
} 

func doSomething(x: Int?) 
{ 
    print("\(x) is an optional") 
} 

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

let y = 5 
doSomething(y) // prints 5 is an Int 

let z: Int? = 6 
doSomething(z) // prints Optional(6) is an optional 

मुझे अभी तक वास्तविक जीवन में ऐसा कुछ नहीं दिख रहा है।

ऐप्पल दस्तावेज के संबंध में, यह एक साधारण उदाहरण है।

+1

यह एक खिंचाव का थोड़ा सा है, लेकिन इससे पहले कि हम चलो एक्स: इंट का उपयोग करने के लिए एक बेहतर कारण खोज सकें? = जो भी हो, अब तक यह सबसे अच्छा जवाब है। शायद, इसके लिए कोई अच्छा कारण नहीं है। ऐप्पल सिर्फ एक बुरे उदाहरण के साथ सचित्र। –

1

एक जोड़े को विचार:

आप मान लिया जाये कि एक विधि

func foo(xValue: Int?)->Int? { 
    // some logic 
} 

शायद आप वास्तव में विधि परिभाषा से मेल खाने के लिए अपने निरंतर परिभाषित करने के लिए चाहते हैं।

let optionalInt: Int? = 9 
let fooVal = foo(optionalInt) 

या (अपने प्रारंभिक let बयान बदल रहा है), निरंतर का मूल्य एक फ़ंक्शन है कि एक वैकल्पिक

let optionalInt: Int? = foo(nil) 
+0

उपरोक्त foo उदाहरण में, क्या आप एक इंट निरंतर के साथ foo कॉल कर सकते हैं? पूर्णांक = 9 जाने fooVal = foo (nonOptionalInt) आप foo इस तरह से फोन नहीं कर सकते, तो AgRizzo वैकल्पिक के रूप में एक मूल्य के साथ एक निरंतर घोषित करने के लिए एक वैध कारण बताया है: nonOptionalInt करते हैं। क्या कोई टिप्पणी कर सकता है? –

+0

मैंने अभी एक प्रयोग चलाया है। फ़ंक्शन foo (xValue: Int?) के लिए, यदि आप पैरा int को पैरामीटर के रूप में मानते हैं, तो यह अभी भी काम करता है। तो, AgRizzo मेरे प्रश्न के लिए एक वैध कारण प्रदान नहीं किया था। –

+0

@AndrewF। - मैंने आपको दो कारण प्रदान किए हैं। आप मेरे कारणों को पसंद नहीं कर सकते हैं लेकिन आपने साबित नहीं किया कि मेरे कारण अमान्य थे। आपने साबित किया कि एक इंट को वैकल्पिक रूप से वैकल्पिक इंट में डाला जा सकता है। – AgRizzo

3

मैं सेब दस्तावेज़ के इस विशेष अंग बस उदाहरण देकर स्पष्ट करने का इरादा है लगता है से निर्धारित होता है विकल्प की अवधारणा और कुछ भी नहीं। वे let का उपयोग let गुण/चर घोषित करने के साथ हमेशा अच्छे अभ्यास से let का उपयोग करते हैं और केवल उन्हें अपने मूल्यों को बदलने की स्पष्ट आवश्यकता होने पर var पर स्विच करते हैं।

सवाल के रूप में क्यों कोई let foo: Int? = 9 घोषित करेगा और न केवल let foo = 9। खैर, मैं वास्तव में कल्पना नहीं कर सकता कि इसकी आवश्यकता होगी। यहां तक ​​कि अगर कुछ एपीआई Int? की अपेक्षा करता है तो भी आप Int के एक चर को इस तरह के एपीआई में टाइप कर सकते हैं और स्विफ्ट निश्चित रूप से इसे आपके लिए परिवर्तित कर देगा। शायद, यदि आप इसे एक सामान्य कार्य में पास करते हैं और आप उस जेनेरिक के Int? संस्करण का उपयोग करना चाहते हैं तो आप ऐसा करना चाहेंगे, लेकिन यह व्यावहारिक उपयोग करने के लिए पहले से ही अकादमिक है।

+0

यह सही उत्तर है। एक वैकल्पिक बनाने के लिए कभी बेहतर नहीं होता है जब आप जानते हैं कि मान कभी भी 'शून्य 'नहीं होगा। अन्य उत्तरों में दूर-दूर का उदाहरण भी आवश्यक होने पर एक स्पष्ट कलाकार के साथ बेहतर होगा। – Sulthan

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