2017-03-28 31 views
5

मुझे एक ऐसा ईवेंट प्राप्त हो रहा है जो () प्रकार का पैरामीटर पास करता है।स्विफ्ट में '()' प्रकार क्या है?

क्या यह एक खाली ट्यूपल है ..?

मैं अभिव्यक्ति के इस प्रकार की चर्चा करते हुए हूँ:

let x =()

+1

@xoudini: निकटता से संबंधित, लेकिन बिल्कुल वही नहीं (मुझे लगता है)। यह प्रश्न '()' एक प्रकार के रूप में है। यहां '()' एक मान है, और इसे 'शून्य' द्वारा प्रतिस्थापित नहीं किया जा सकता है। 'x = शून्य' संकलित नहीं करते हैं। –

+0

'()' के मूल्य के रूप में स्पष्ट उपयोग पर दिलचस्प चर्चा: [क्या खाली tuples(), यानी टाइपलास 'शून्य' के उदाहरणों के उदाहरणों (मूल्यों) के संभावित संभव उपयोग हैं? (Http://stackoverflow.com/q/34561452/2976878) – Hamish

+1

@ मार्टिनआर अच्छा बिंदु, और एक और रूप पर मुझे इस बात से सहमत होना होगा कि प्रश्न बिल्कुल समान नहीं हैं। व्याकरण दस्तावेज से – xoudini

उत्तर

4

() दोनों एक प्रकार (और Void खाली टपल प्रकार के लिए एक प्रकार का अन्य नाम है) और इस तरह का एकमात्र मूल्य है। तो

let x =() 

मूल्य() साथ प्रकार() (उर्फ Void) की एक निरंतर संपत्ति के रूप में x परिभाषित करता है।

समतुल्य बयान

let x:() =() 
let x:Void =() 

लेकिन

let x = Void // error: expected member name or constructor call after type name 

वजह से नहीं Void एक प्रकार नहीं बल्कि एक मूल्य है किया जाएगा।

जब समारोह प्रकार परिभाषित करने कोई पैरामीटर और/या कोई वापसी मान के साथ कोई वापसी मान के लिए एक खाली पैरामीटर सूची के लिए () उपयोग करने के लिए, और Void एक आम सहमति हो रहा है। उदाहरण के लिए यह UIKit समापन हैंडलर, या जीसीडी प्रेषण कतारों को सबमिट निष्पादन ब्लॉक के लिए देखा जा सकता है, उदाहरण के लिए

func sync(execute block:() -> Void) 
+2

ए जोड़ देगा कि कोई पैराम के साथ कार्यों को परिभाषित करने की सर्वसम्मति और कोई वापसी मूल्य '() -> शून्य 'हालांकि'() ->() 'और' (शून्य) -> शून्य' संभव है। – Sulthan

+0

@ सुल्तान: आप सही हैं और सुझाव के लिए धन्यवाद। हालांकि, मैं कुछ संदर्भ के साथ बैकअप करना पसंद करूंगा जो मुझे अभी तक नहीं मिला है। –

+0

मुझे नहीं लगता कि यदि आप सभी समापन हैंडलरों के लिए ऐप्पल संदर्भ दस्तावेज की गणना नहीं करते हैं तो कोई संदर्भ नहीं है :) – Sulthan

2

हाँ, यह खाली टपल, उर्फ ​​Void है।

मानक Void प्रकार के रूप में परिभाषित किया गया है:

typealias Void =() 

कार्यों कि स्पष्ट रूप से एक वापसी प्रकार निर्दिष्ट नहीं करते की वापसी प्रकार; एक खाली टुपल (यानी, ())।

2

Swift grammar के लिये दस्तावेज को देखते हुए:

सभी टपल प्रकार Void जो खाली टपल प्रकार के लिए एक type alias है, () के अलावा, दो या अधिक प्रकार के होते हैं।

tuple-type → (­)­ | (­ tuple-type-element­ , ­tuple-type-element-list­)­ 
tuple-type-element-list → tuple-type-element­ | tuple-type-element ­, ­tuple-type-element-list­ 
tuple-type-element → element-name­ type-annotation­ | type­ 
element-name → identifier­ 

इसलिए हाँ, यह शून्य प्रकार/तत्वों की एक टपल है।

+1

भी। > * सभी ट्यूपल प्रकारों में 'शून्य' को छोड़कर दो या दो से अधिक प्रकार होते हैं, जो खाली टुपल प्रकार, (() '* के लिए एक प्रकार उपनाम है। –

+0

@ गैब्रिएल पेट्रोनेला उस वाक्य को इंगित करने के लिए धन्यवाद। – luk2302

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