दिलचस्प पोस्ट
सीएसएस संक्रमण प्रभाव छवि blurry बनाता है / छवि 1px चाल, क्रोम में? PHP के माध्यम से एक फ़ाइल को कैसे हटाएं? नए तत्वों का निर्माण करने के लिए उत्परिवर्तन पर्यवेक्षक एसक्यूएल इंजेक्शन क्या है? कॉरस हैडर 'एक्सेस-कंट्रोल-अनुमति-मूल' लापता एक ही विधि के लिए व्यवस्थापक अधिकार कक्षा के कार्यों (विधि) प्राप्त करें xpath में केस-असंवेदनशील मिलान? जावा: SSL प्रमाणपत्र जांच को अक्षम करने के लिए ओवरराइडिंग फ़ंक्शन मापदंडों को सही ढंग से कैसे पार करें? requirejs, नियंत्रक के आलसी लोडिंग के साथ कोणीय रूटर-राउटर एलआरयू कैश डिज़ाइन ईक्लीपस से टोमकैट शुरू करते समय "सेटप्रॉपर्टीज़ राउल" चेतावनी संदेश ब्राउज़र बैक बटन हैंडलिंग वेब से निष्पादित होने पर प्रश्न समय, लेकिन एसएसएमएस से निष्पादित होने पर सुपर-फास्ट

स्विफ्ट सन्दर्भ में क्या _ अंडरस्कोर प्रतिनिधि है?

ऐप्पल के डॉक्स के संदर्भ खंड में इस तरह की कई चीजें हैं:

action func runAction(_ action : SKAction!)

इसका उद्देश्य- C 'समतुल्य है:

- (void)runAction:(SKAction *) action

यह मुझे मारता है कि यह शायद महत्वपूर्ण है कि (स्विफ्ट संदर्भ में) अंडरस्कोर के बाद एक स्थान है और "एक्शन" इटैलिक में लिखा है।

लेकिन मैं यह समझ नहीं पा रहा हूं कि ये क्या कहने की कोशिश कर रहा है। तो शायद सवाल है … क्या सन्दर्भ में इस्तेमाल होने वाले सम्मेलनों के लिए कोई संदर्भ है?

– इस पृष्ठ पर मैं इस संदर्भ में अंडरस्कोर उपयोग के संदर्भ में हूं: https://developer.apple.com/documentation/spritekit/sknode#//apple_ref/occ/instm/SKNode/runAction

अद्यतन करें

स्विफ्ट 3 ने फ़ंक्शन / विधि पैरामीटर नाम और तर्क लेबल का उपयोग कैसे किया और नाम के लिए कुछ बदलाव किए हैं। इस प्रश्न पर इसके असर और इसका उत्तर है। @ रिक्स्टर कार्यों के बारे में एक दूसरे प्रश्न का जवाब देने की एक अद्भुत काम करता है जो कि इससे बहुत कुछ साफ़ करता है, यहां: मुझे तेज गति में क्यों आवश्यकता है?

वेब के समाधान से एकत्रित समाधान "स्विफ्ट सन्दर्भ में क्या _ अंडरस्कोर प्रतिनिधि है?"

दोनों उत्तर सही थे लेकिन मैं थोड़ा और अधिक स्पष्ट करना चाहता हूं

_ विधियों के लिए बाहरी पैरामीटर नाम व्यवहार को संशोधित करने के लिए उपयोग किया जाता है।

दस्तावेज़ के तरीकों अनुभाग के लिए स्थानीय और बाहरी पैरामीटर नामों में , यह कहते हैं:

स्विफ्ट डिफ़ॉल्ट रूप से एक स्थानीय पैरामीटर नाम विधि में पहला पैरामीटर नाम देता है, और डिफ़ॉल्ट रूप से दोनों स्थानीय और बाह्य पैरामीटर नामों को दूसरे और बाद के पैरामीटर नाम देता है।

दूसरी ओर, डिफ़ॉल्ट रूप से फ़ंक्शंस बाह्य पैरामीटर नाम नहीं है।

उदाहरण के लिए, हमारे पास क्लास Bar में परिभाषित इस foo() विधि है:

 class Bar{ func foo(s1: String, s2: String) -> String { return s1 + s2; } } 

जब आप foo() कॉल करते हैं, तो इसे बार। bar.foo("Hello", s2: "World")

लेकिन , आप इस व्यवहार को एस 2 के सामने _ का उपयोग करके ओवरराइड कर सकते हैं जहां इसे घोषित किया गया है

 func foo(s1: String, _ s2: String) -> String{ return s1 + s2; } 

उसके बाद, जब आप foo कॉल करते हैं, तो इसे दूसरे पैरामीटर के नाम के बिना बार। bar.foo("Hello", "World") कहा जा सकता है।

अपने मामले में वापस जाएं, runAction एक विधि है क्योंकि यह SKNode प्रकार से SKNode , जाहिर है। इस प्रकार, पैरामीटर action से पहले एक _ डालकर आपको किसी बाहरी नाम के बिना runAction action को कॉल करने की अनुमति runAction

स्विफ्ट 2.0 के लिए अपडेट

फ़ंक्शन और विधि अब स्थानीय और बाह्य तर्क नाम घोषणा के मामले में उसी तरह कार्य करते हैं।

फ़ंक्शंस को अब बाह्य पैरामीटर नाम का उपयोग डिफ़ॉल्ट रूप से 2 पैरामीटर से शुरू करके किया जाता है। यह नियम केवल शुद्ध स्विफ्ट कोड पर लागू होता है।

इसलिए, किसी फ़ंक्शन के सामने एक _ को प्रदान करके, कॉलर को बाहरी पैरामीटर नाम निर्दिष्ट करने की आवश्यकता नहीं होगी, ठीक उसी तरह कि आप किसी विधि के लिए क्या करेंगे।

अंडरस्कोर एक सामान्य टोकन है जिसे एक छोड़ा गया मूल्य इंगित करने के लिए उपयोग किया जाता है।

इस विशिष्ट मामले में, इसका मतलब है कि फ़ंक्शन को runAction(action:argument) बजाय runAction(action:argument) runAction(argument) रूप में लागू किया जाएगा

अन्य संदर्भों में इसके अन्य समान अर्थ हैं, जैसे:

 for _ in 0..<5 { ... } 

इसका मतलब है कि हम केवल 5 बार ब्लॉक निष्पादित करना चाहते हैं और हमें ब्लॉक के अंदर सूचकांक की परवाह नहीं है।

इस सन्दर्भ में:

 let (result, _) = someFunctionThatReturnsATuple() 

इसका मतलब है कि हमें परवाह नहीं है कि ट्यूपल का दूसरा तत्व क्या है, केवल पहला।

पैरामीटर घोषणा के सामने एक पहचानकर्ता बाहरी पैरामीटर नाम को परिभाषित करता है। यह वह नाम है जिसे कॉलर द्वारा फ़ंक्शन कॉल करते समय प्रदान किया जाना चाहिए:

 func someFunction(externalParameterName localParameterName: Int) 

स्विफ्ट आप निर्दिष्ट किसी भी डिफ़ॉल्ट पैरामीटर के लिए एक स्वचालित बाह्य नाम प्रदान करता है, यदि आप एक बाहरी नाम स्वयं प्रदान नहीं करते हैं बाहरी पैरामीटर नाम के लिए अंडरस्कोर का उपयोग इस व्यवहार से बाहर निकलता है:

जब आप पैरामीटर को परिभाषित करते हैं तो आप एक स्पष्ट बाहरी नाम के बजाय अंडरस्कोर ( _ ) लिखकर इस व्यवहार से ऑप्ट आउट कर सकते हैं

आप इस व्यवहार के बारे में अतिरिक्त नामों के साथ पैरामीटरों के लिए बाह्य नामों के अनुभाग में यहां पढ़ सकते हैं।

चूंकि स्विफ्ट 3 सभी तर्क लेबल डिफ़ॉल्ट रूप से आवश्यक हैं।

आप ID के साथ तर्क लेबल को छिपाने के लिए IDE को मजबूर कर सकते हैं

 func foo(a: String) { } func foo2(_ a: String) { } 

बुलाया foo(a: "abc") और foo2("abc")

नोट: इसका उपयोग केवल तब ही किया जा सकता है जब a ही (बाहरी) तर्क लेबल और (आंतरिक) चर नाम एक ही समय में हो। यह समतुल्य है – func foo(aa: String) _ स्वीकार नहीं करेगा।

एप्पल इसका इस्तेमाल क्यों कर रहा है?

आप देख सकते हैं कि एप्पल इसे एपीआई भर में उपयोग कर रहा है। ऐप्पल की लाइब्रेरीज़ अभी भी उद्देश्य-सी में लिखे गए हैं (यदि नहीं, तो वे वही फ़ंक्शन नाम साझा करते हैं, जो कि उद्देश्य-सी वाक्यविन्यास के लिए डिज़ाइन किए गए थे)

applicationWillResignActive(_ application: UIApplication) तरह applicationWillResignActive(_ application: UIApplication) क्रिया applicationWillResignActive(_ application: UIApplication) में अनावश्यक पैरामीटर नाम application , क्योंकि इसमें पहले से ही इसके फ़ंक्शन नाम में एप्लिकेशन है।

आपका उदाहरण

func runAction(_ action: SKAction!) को इसके बिना runAction(action:) पैरामीटर नाम की action बेमानी होगी क्योंकि फ़ंक्शन नाम में पहले से ही एक है। यही उद्देश्य है और ऐसा क्यों है

मुझे लगता है कि यह स्विफ्ट में एक सम्मेलन को बल देता है जो उद्देश्य-सी के करीब पढ़ता है, जो कोको के सम्मेलनों को बेहतर बनाती है। Objc में आप (बाह्य) नाम नहीं अपना पहला पैरामीटर इसके बजाय, सम्मेलन से आप आमतौर पर इस तरह के विधि नाम के उत्तरार्द्ध में बाहरी नाम शामिल करते हैं:

 - (void)myFancyMethodWithFirstName:(NSString *)aFirstName lastName:(NSString *)aLastName; [someInstance myFancyMethodWithFirstName:@"John" lastName:@"Doe"]; 

स्विफ्ट एपीआई को ओजजेक के साथ संगत करने के लिए आप पहली पैरामीटर के बाह्य पैरामीटर नाम को दबाने चाहते हैं।

 func myFancyMethodWithFirstName(_ firstName:String, lastName:String); someInstance.myFancyMethodWithFirstName("John", lastName:"Doe") 

दरअसल, एप्पल के डॉक्स में एक विधि और विधि घोषणा को परिभाषित करने के लिए वास्तविक कोड के बीच अंतर है। चलो UIControl 's – addTarget: action: forControlEvents: उदाहरण के लिए विधि, असली कोड है: यहां छवि विवरण दर्ज करें

लेकिन दस्तावेज़ों में, यह इस तरह दिखाई देता है (लक्ष्य से पहले नोटिस): यहां छवि विवरण दर्ज करें

वास्तविक कोड में, द्वितीय या बाद के पैरामीटर के बाह्य नाम को एक विधि कहा जाता है, तब दिखाई नहीं देता जब डॉक्स में, _ पैरामीटर के स्थानीय नाम से पहले इसका संकेत मिलता है कि जब आप कोई विधि या फ़ंक्शन कॉल करते हैं, तो आपको बाहरी नाम

जब कोई फ़ंक्शन डिफ़ॉल्ट रूप से बुलाया जाता है, तब तक कोई बाहरी नाम नहीं होता है जब तक कि आप अपना स्वयं का प्रदान न करें या # पहले (बिना किसी सफेद स्थान के) को एक पैरामीटर का स्थानीय नाम दें, उदाहरण के लिए, इस तरह हम प्रेषण के बाद उपयोग करते हैं: यहां छवि विवरण दर्ज करें

और दस्तावेज़ों में, यह इस तरह दिखाई देता है (नोटिस तीन): यहां छवि विवरण दर्ज करें

फ़ंक्शन के घोषणा का सम्मेलन सिर्फ वही है जैसा मैंने विधि के लिए वर्णित किया है।

बस नेत्रहीन

यहां छवि विवरण दर्ज करें

जैसा कि आप देख सकते हैं _ सिर्फ एक स्थानीय पैरामीटर नाम को न छोड़ें या नहीं।