2015-01-28 3 views
17

इन सवालों के लिए खेद है4 स्विफ्ट में चयनकर्ताओं के बारे में प्रश्न

मेरे पास चयनकर्ता के बारे में 4 प्रश्न हैं।

पहला सवाल

मैं सोच रहा हूँ तेज

closeBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop, target: self, action: Selector("closeBarButtonItemClicked:")); 

में चयनकर्ता का उपयोग करने के लिए वी.एस.

closeBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop, target: self, action: "closeBarButtonItemClicked:"); 

हम चयनकर्ता का उपयोग करना चाहिए उचित तरीका है क्या ("methodName:") या "विधि नाम:" तुरंत?

दोनों तरह से काम करता है लेकिन कौन सा सही तरीका है?

दूसरा सवाल

हम कैसे स्विफ्ट में एक पैरामीटर के साथ एक समारोह कहते हैं? मान लीजिए कि मैं इस

func methodName(parameterOne : String, parameterTwo: String) 

तीसरा सवाल

हम तेजी में चयनकर्ता का उपयोग कर एक प्रकार विधि कैसे कहते हैं की तरह एक समारोह कॉल करना चाहते हैं? क्या यह भी संभव है?

class SomeClass { 
class func someTypeMethod() { 
// type method implementation goes here 
    } 
} 

चौथी प्रश्न

चयनकर्ता में समारोह नाम के पीछे है कि बृहदान्त्र के उद्देश्य क्या है?

+7

आपके अंतिम प्रश्न के अनुसार, फ़ंक्शन नाम के बाद कोई कॉलन नहीं है। कोलन * फ़ंक्शन नाम का हिस्सा है। 'Xyz:' नामक फ़ंक्शन 'xyz' नाम से एक पूरी तरह से अलग फ़ंक्शन है। –

+1

http://stackoverflow.com/questions/24007650/selector-in- इस पोस्ट के बारे में चयनकर्ताओं पर विस्तृत स्पष्टीकरण है – Gerald

+0

प्रतिनिधि या अपवॉट्स के लिए प्रार्थना न करें। धन्यवाद। – Moritz

उत्तर

14

प्रश्न 1: मुझे नहीं लगता कि वास्तव में एक सही तरीका है। मैं व्यक्तिगत रूप से दूसरा तरीका पसंद करता हूं, लेकिन दोनों काम करते हैं इसलिए मुझे नहीं लगता कि यह वास्तव में मायने रखता है।

प्रश्न 2: मैंने अभी आपको प्रश्न पढ़ा है। मुझे लगता है कि आप एक चयनकर्ता में इसे कॉल करने का मतलब है। मेरे लिए चयनकर्ता का मानना ​​है कि "methodName:parameterTwo:" होगा लेकिन मैं सकारात्मक नहीं हूं, क्योंकि दो पैरामीटर वाले चयनकर्ता के पास चयनकर्ता में एक बाहरी पैरामीटर नाम होना चाहिए जहां पैरामीटर दो मेरे उत्तर में है।

पुराने प्रश्न 2 जवाब (पूर्व संपादित करने के लिए): आप methodName(variable1, parameterTwo: variable2). के रूप में है कि फ़ंक्शन को कॉल तुम उन्हें कहना कॉल में पैरामीटर नाम आप हेडर methodName(calledVarName parameterOne: String, calledVarName2 parameterTwo: String) कर सकता है बनाना चाहते थे तो होगा। इसे methodName(calledVarName: variable1, calledVarName2: variable2) कहा जाएगा। आप हेडर को methodName(#parameterOne: String, #parameterTwo: String) के रूप में भी परिभाषित कर सकते हैं। इसे methodName(parameterOne: variable1, parameterTwo: variable2) कहा जाएगा। यहां और पढ़ें: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html

प्रश्न 3: मैं निश्चित रूप से नहीं कह सकता, लेकिन मुझे नहीं लगता कि इसके लिए चयनकर्ता बनाने का एक तरीका है। अगर मुझे लगता है कि यह "someTypeMethod" होगा

पुराना प्रश्न 3 उत्तर (संपादन से पहले): आप इस विधि को SomeClass.someTypeMethod() पर कॉल कर सकते हैं।

प्रश्न 4: कॉलन इंगित करता है कि फ़ंक्शन हेडर में पैरामीटर है।तो "function1:"func function1(someParameterName: AnyObjectHere) से संबंधित है जबकि "function1"func function1() से मेल खाता है।

+0

बहुत अच्छी तरह उत्तर दिया! – Tokuriku

17

@ ad121 का जवाब है महान बस # 1 के लिए एक छोटे से संदर्भ जोड़ना चाहते हैं:

Selector प्रकार StringLiteralConvertible होने की स्विफ्ट में बढ़ा दिया गया है। किसी भी समय Selector उदाहरण की अपेक्षा की जाती है, आप इसके बजाय स्ट्रिंग अक्षरशः दे सकते हैं और Selector उदाहरण आपके लिए बनाया जाएगा। यह आपको यह भी एक स्ट्रिंग शाब्दिक मैन्युअल रूप से एक Selector उदाहरण बना सकते हैं मतलब है:

let mySelector: Selector = "methodName:withParameter:" 

ध्यान दें कि यह मतलब यह नहीं है एक String एक Selector के लिए भी इस्तेमाल किया जा सकता केवल -इस स्ट्रिंग शाब्दिक साथ काम करता है। निम्नलिखित असफल हो जायेगी:

let methodName = "methodName:withParameter:" 
let mySelector: Selector = methodName 
// error: 'String' is not convertible to 'Selector' 

में मामले आप आवश्यकता होगी वास्तव में Selector निर्माता खुद के कॉल करने के लिए:

let methodName = "methodName:withParameter:" 
let mySelector = Selector(methodName) 
4

अपने 3 प्रश्न का उत्तर देना: आप पूरी तरह से कर सकते हैं। बस लक्ष्य पैरामीटर को प्रकार पर सेट करें।

आप एक वर्ग में परिभाषित किया गया है कहते हैं:

let something = SomeType() 
let closeBarButtonItem = UIBarButtonItem(barButtonSystemItem:UIBarButtonSystemItem.Stop, target: something, action: "someMethod") 

बदलें लक्ष्य और कॉल प्रकार के पास भेज हो जाएगी:

class SomeType { 
    class func someMethod() {} 
    func someMethod() {} 
} 

अब आप अपने उदाहरण ले रही है, इस उदाहरण विधि कॉल करेगा:

let closeBarButtonItem = UIBarButtonItem(barButtonSystemItem:UIBarButtonSystemItem.Stop, target: SomeType.self, action: "someMethod") 
संबंधित मुद्दे