- क्या @objc
अनुमान है? क्या हो रहा है?
में Swift 3
, संकलक infers @objc
स्थानों की संख्या में आप के लिए नहीं होगा तो। दूसरे शब्दों में, यह @objc
आपके लिए जोड़ना सुनिश्चित करता है !
Swift 4
संकलक में , अब ऐसा नहीं करता है (जितना)। अब आपको @objc
स्पष्ट रूप से जोड़ना होगा ।
डिफ़ॉल्ट रूप से, यदि आपके पास पूर्व-स्विफ्ट 4 परियोजना है, तो आपको इस बारे में चेतावनी मिलेगी। स्विफ्ट 4 प्रोजेक्ट में, आपको बिल्ड एरर मिलेंगे। इसे SWIFT_SWIFT3_OBJC_INFERENCE
बिल्ड सेटिंग के माध्यम से नियंत्रित किया जाता है । प्री-स्विफ्ट 4 प्रोजेक्ट में यह सेट है On
। मैं इसे Default
(या Off
) पर सेट करने की सिफारिश करूंगा , जो अब एक नई परियोजना पर डिफ़ॉल्ट विकल्प है।
सब कुछ बदलने में कुछ समय लगेगा, लेकिन चूंकि यह स्विफ्ट 4 के लिए डिफ़ॉल्ट है, इसलिए यह करने योग्य है।
- मैं कंपाइलर चेतावनियों / त्रुटियों को कैसे रोकूँ?
आपके कोड को परिवर्तित करने के बारे में दो तरीके हैं ताकि कंपाइलर शिकायत न करे।
@objc
प्रत्येक फ़ंक्शन या वैरिएबल पर एक का उपयोग करना है जिसे ऑब्जेक्टिव-सी रनटाइम के लिए उजागर किया जाना है:
@objc func foo() {
}
दूसरे को घोषणा @objcMembers
द्वारा उपयोग करना है Class
। यह सुनिश्चित करें कि करने के लिए स्वचालित रूप से जोड़ बनाता @objc
करने के लिए सभी वर्ग में कार्य करता है और चर। यह आसान तरीका है, लेकिन इसकी एक लागत है, उदाहरण के लिए, यह उन कार्यों को उजागर करके आपके आवेदन का आकार बढ़ा सकता है जिन्हें उजागर करने की आवश्यकता नहीं थी।
@objcMembers class Test {
}
- क्या है @objc
और यह क्यों आवश्यक है?
यदि आप एक स्विफ्ट वर्ग के लिए नए तरीके या चर पेश करते हैं, तो उन्हें चिह्नित करना उन्हें @objc
उद्देश्य-सी रनटाइम के लिए उजागर करता है। यह आवश्यक है जब आपके पास ऑब्जेक्टिव-सी कोड हो जो आपके स्विफ्ट क्लास का उपयोग करता है, या, यदि आप ऑब्जेक्टिव-सी-टाइप सुविधाओं का उपयोग कर रहे हैं Selectors
। उदाहरण के लिए, लक्ष्य-क्रिया पैटर्न:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- मैं सब कुछ चिह्नित क्यों नहीं करूंगा @objc
?
नकारात्मक चीजें हैं जो कुछ को चिह्नित करने के साथ आती हैं @objc
:
- बढ़ी हुई एप्लिकेशन बाइनरी आकार
- कोई फ़ंक्शन ओवरलोडिंग नहीं
कृपया ध्यान रखें कि यह एक बहुत ही उच्च-स्तरीय सारांश है और यह जितना मैंने लिखा है उससे कहीं अधिक जटिल है। मैं अधिक जानकारी के लिए वास्तविक प्रस्ताव पढ़ने की सलाह दूंगा।
सूत्रों का कहना है: