2016-03-22 9 views
7

मैं अपने NSNotificationCenter ठीक करने के लिए कोशिश कर रहा हूँ और उसकेसिंटेक्स "चयनकर्ता" स्विफ्ट 2.2

संदेश काम नहीं कर रहा:

'Use of string literal for Objective-C selectors is deprecated; use '#selector' instead'. 

लाइन:

NSNotificationCenter.defaultCenter().addObserver(self, Selector :#selector(GameViewController.goBack)(GameViewController.goBack), object: nil) 
     self.dismissViewControllerAnimated(true, completion: { 
     }); 
     } 

उत्तर

16

@ Eendje के जवाब से सही नहीं है इसकी पहली टिप्पणी।

मुझे लगता है कि यह बेहतर जवाब है। कुछ कार्रवाई लक्ष्य है

NSNotificationCenter.defaultCenter().addObserver(self, #selector(self.goBack), name: "your notification name", object: nil) 

है, यह #selector(target.method) या #selector(target.method(_:))

यहाँ की तरह प्रस्तुत किया जाना चाहिए एक और उदाहरण

UIGestureRecognizer(target: target action:#selector(target.handleGesture(_:)) 
3

हाँ , स्विफ्ट 2.2 में चयनकर्ताओं के लिए स्ट्रिंग अक्षर को बहिष्कृत किया गया है, और इसके बजाय वहां नया ऑपरेटर # चयनकर्ता है जिसका उपयोग करने की आवश्यकता है ।

https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md

-2

अपने चयनकर्ता विधि के लिए @objc जोड़ें::

यहाँ अच्छा उदाहरण के साथ #selector के इस प्रस्ताव का संदर्भ लें

NSNotificationCenter.defaultCenter().addObserver(self, selector: "YOUR_SELECTOR_METHOD:", name: "your notification name", object: nil) 

@objc func YOUR_SELECTOR_METHOD(notification: NSNotification) { 
//your code 
} 
+0

यह काम करने के एक बुरा तरीका है। सिर्फ इसलिए कि आप इसे कर सकते हैं, इसका मतलब यह नहीं है कि आपको चाहिए। कम त्रुटि वाला प्रवण तरीका '# selector' – barndog

8

कोड आप चिपकाया किसी भी मतलब नहीं है:

Selector :#selector(GameViewController.goBack)(GameViewController.goBack) // ??? 

यह होना चाहिए:

NSNotificationCenter.defaultCenter().addObserver(self, #selector(goBack), name: "your notification name", object: nil) 
+0

का उपयोग करना है यह भी गलत है।आप एक पर्यवेक्षक, 'स्वयं' जोड़ रहे हैं, लेकिन एक कक्षा या स्थिर स्तर समारोह 'goBack' में गुजर रहे हैं। 'UIView' पर 'addSubview' जैसे इंस्टेंस फ़ंक्शन का संदर्भ प्राप्त करने के लिए, आपको' देखने दें = UIView()' 'कार्य करने दें Variable = view.addSubview (_ :)' – barndog

+1

और चयनकर्ता के साथ NSNotification पैरामीटर के बारे में क्या करना है ? क्या यह अभी भी है (_ :)? –

4

आप इसे देखो करने के लिए है: https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md

#selector प्रस्ताव एक और प्रस्ताव के साथ संयोजन के रूप में बनाया गया था, उनके तर्क लेबल द्वारा तेजी से काम करता है को निर्दिष्ट। तो अगर मैं एक struct है:

struct Thing 
    func doThis(this: Int, withOtherThing otherThing: Int) { 

    } 
} 

मैं संदर्भ की तरह है कि समारोह:

let thing = Thing() 
thing.doThis(_:withOtherThing:) 

यहाँ याद रखें मैं, समारोह अपने आप में संदर्भित कर रहा हूँ यह बुला नहीं।

आप का प्रयोग करेंगे कि #selector साथ:

#selector(self.doThis(_:withOtherThing:) 

समारोह कोई तर्क के साथ:

#selector(self.myFunction) 

एक अंतर्निहित तर्क के साथ फंक्शन:

#selector(self.myOtherFunction(_:)) 
संबंधित मुद्दे