2017-07-02 14 views
5

मैं इस प्रकार मेरे विचार करने के लिए एक इशारा जोड़ने के लिए देख रहा हूँ बनाम:स्विफ्ट 4 ऐड इशारा: ओवरराइड @objc

override func viewDidLoad() { 
    super.viewDidLoad() 

    < blah blah blah > 

    // Add tap gesture 
    let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap)) 
    myView.addGestureRecognizer(tap) 
} 

हालांकि, स्विफ्ट 4 मेरी संकलक मुझे निम्न त्रुटि दे रहा है में:

Argument of '#selector' refers to instance method 'handleTap()' that is not exposed to Objective-C 

सुझाव इस उद्देश्य विधि को उद्देश्य-सी को बेनकाब करने के लिए @objc को जोड़ने का सुझाव है।

इसे लागू करने के लिए अन्य विकल्प (केवल कोड के माध्यम से) touchesBegan() फ़ंक्शन को ओवरराइड करना होगा और टैप को संभालने के लिए इसका उपयोग करना होगा।

मैं ओब्जे-सी लाने के बिना इसे 'स्विफ्ट' तरीके से करने की कोशिश कर रहा हूं। @objc का उपयोग किये बिना इस टैप इशारा को जोड़ने का शुद्ध स्विफ्ट तरीका है? या यह है कि इस टैप इशारा को जोड़ने का सामान्य और इच्छित तरीका है?

+0

संभावित डुप्लिकेट [मैं स्विफ्ट 4 में # चयनकर्ता() के साथ @objc अनुमान को बहिष्कृत कैसे कर सकता हूं?] (Https://stackoverflow.com/questions/44390378/how-can-i-deal-with-objc -इंटरेंस-बहिष्करण-चयनकर्ता-इन-स्विफ्ट -4) – LinusGeffarth

उत्तर

17

@objc का उपयोग करना सामान्य और इच्छित तरीका है।

अंतर्निहित इशारा recogniser कोड ऑब्जेक्टिव-सी में लिखा है तो आप अपने चयनकर्ता ऑब्जेक्टिव-सी से प्रतिदेय बनाने की जरूरत है और यह कि सभी @objc कर रहा है।

आपकी वैकल्पिक तकनीक अभी भी उद्देश्य सी-एपीआई का उपयोग कर रही है, लेकिन चयनकर्ताओं के बिना उनके साथ बातचीत कर रही है, इसलिए यह केवल कम दिखाई दे रही है।

+0

अच्छा उत्तर;) मैं केवल यह जोड़ूंगा कि यह परिवर्तन [सीमित @objc अनुमान प्रस्ताव] द्वारा लागू किया गया था (https://github.com/apple/swift स्विफ्ट 4 में -वॉल्यूशन/ब्लॉब/मास्टर/प्रस्ताव/0160-objc-inference.md)। –

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