2016-03-24 14 views
7

का निर्माण करने के बजाय # चयनकर्ता का उपयोग करें निम्न स्निपेट में, एक्सकोड "अनुशंसाकर्ता को स्पष्ट रूप से बनाने के बजाय # चयनकर्ता का उपयोग क्यों करें" का कारण क्या है?स्पष्ट रूप से चयनकर्ता

// addButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.Add, 
//    target: self, action: #selector(FoldersMaintenanceVC.addButtonPressed)) 
addButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.Add, 
      target: self, action: Selector("addButtonPressed")) 

self.navigationItem.leftBarButtonItem = addButton 

func addButtonPressed() 
{ 
    myNslogSys2(self, funcName:#function) 
} 

उत्तर

9

यह सिफारिश की है कि आप Swift 2.2 new #selector उपयोग करें, क्योंकि यह अधिक प्रकार के लिए सुरक्षित है, क्योंकि आप चयनकर्ता (स्ट्रिंग) के साथ, आप एक गैर मौजूदा संदर्भ सकते थे, जबकि गैर मौजूदा पद्धति के लिए एक चयनकर्ता संदर्भ नहीं कर सकता।

+0

बारे में अधिक जानकारी पढ़ सकते हैं हालांकि इस में एक दोष नहीं है। अगर मैं एक गलत वर्ग की आपूर्ति करता हूं जिसमें मौजूदा विधि है लेकिन मेरा इच्छित लक्ष्य वर्ग - स्वयं, आदि में यह मौजूदा विधि नहीं है, तो यह रन टाइम पर दुर्घटनाग्रस्त हो जाएगा। – user523234

+0

यदि मैं ऐसा कुछ करना चाहता हूं तो मैं क्या कर सकता हूं: अगर उत्तरदाता!। संवाददाता चयनकर्ता (चयनकर्ता ("एएमआईडी:")) == सच {...} –

+0

@KyleKIM यदि कोई विधि कक्षा या प्रोटोकॉल से आता है और है वैकल्पिक नहीं, शायद कुछ ऐसा है जैसे उत्तरदाता = उत्तरदाता को दें? प्रोटोकॉल {responder.aMethod (मान)} 'या अन्यथा' अगर उत्तरदाता!। संवाददाता चयनकर्ता (# चयनकर्ता (प्रोटोकॉल.एम विधि (_ :)) {...} ' – Valentin

5

#selector का उपयोग कर चयनकर्ता को संदर्भित करने के लिए स्विफ्ट में सही तरीका है। संरचना Selector और चयनकर्ताओं के लिए स्ट्रिंग अक्षर का उपयोग, जैसे कि "mySel:" को बहिष्कृत कर दिया गया है।

नई #selector सुरक्षित टाइप है और (स्ट्रिंग शाब्दिक के मामले में) संकलक जाँच और चयनकर्ता कि आप में से गुजर रहे हैं। यह आपके चयनकर्ता में वर्तनी की गलती की बहुत आम गलती को ठीक करता को स्वतः पूर्ण करने की अनुमति देता है

1

यह पदावनत स्ट्रिंग शाब्दिक से अब चयनकर्ता के निर्माण के कारण और स्विफ्ट 3,0

में निकाल दिया जाएगा #selector वाक्य रचना की शुरूआत के साथ, हम स्ट्रिंग शाब्दिक की उपयोग चयनकर्ताओं के लिए फार्म का बहिष्कार करना चाहिए होता है। आदर्श रूप में, हम स्विफ्ट 2.2 में निंदा करते हैं और स्विफ्ट 3.

से पूरी तरह से वाक्य रचना को दूर कर सकता है आप इस परिवर्तन को यहां https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md

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