2014-09-30 9 views
16

मेरे कोरडाटा मॉडल के लिए मेरे पास एक एक्सकोड-जेनरेट एनएसएमएनेज ऑब्जेक्ट क्लास है।मेरी स्विफ्ट क्लास का विस्तार परिभाषित फ़ाइल के बाहर क्यों नहीं दिख रहा है?

@objc(SomeClass) class SomeClass : NSManagedObject { /* ... */ } 

इसे 'SomeClass.swift' नाम की एक फ़ाइल में परिभाषित किया गया है। मैं इस वर्ग को विस्तारित करना चाहता हूं, इसलिए मैंने 'SomeClassExtension.swift' बनाया है। मैं इस तरह के विस्तार को परिभाषित करता हूं:

extension SomeClass { 
    class func typeMethod1() {} 
    func instanceMethod2() {} 
} 

इन एक्सटेंशन विधियों का उपयोग इस परिभाषित फ़ाइल के भीतर किया जा सकता है, लेकिन वे इसके बाहर दिखाई नहीं दे रहे हैं। इस मुद्दे का कारण क्या है?

उत्तर

33

ऐसा लगता है कि आपकी नई फ़ाइल (SomeClassExtension.swift) सही लक्ष्य में शामिल नहीं हुई थी। एक्सकोड में फ़ाइल का चयन करके फ़ाइल की लक्षित सदस्यता को दोबारा जांचें, फिर "फाइल इंस्पेक्टर" खोलें (देखें मेनू> उपयोगिताएं> फाइल इंस्पेक्टर दिखाएं)। सुनिश्चित करें कि सही लक्ष्य लक्ष्य सदस्यता शीर्षक के अंतर्गत चेक किए गए हैं।

+2

मैंने लक्ष्य को अनचेक करना और इसे फिर से जांचना समाप्त कर दिया। उसने मेरे लिए इसे हल कर दिया। – Sam

+0

न तो यहां मदद मिली – brainray

+0

क्या किसी ने यह पता लगाया कि समस्या क्या थी? –

0

मुझे उन तरीकों पर कोई सार्वजनिक संशोधक नहीं दिख रहा है।

+1

स्विफ्ट में सबकुछ डिफ़ॉल्ट रूप से "आंतरिक" है, इसलिए एक फ़ाइल में घोषणाएं तब तक कोड में दिखाई देनी चाहिए जब तक कि वे एक ही निर्माण लक्ष्य का हिस्सा न हों। –

+0

हाँ वास्तव में यह एक उचित बिंदु है। अगर सब कुछ एक ही लक्ष्य में है, तो है। –

+0

@ नेटकूक हाय, नेट। तो क्या स्विफ्ट में परिभाषा और कार्यान्वयन विवरण ('var की विज्ञापन विधियों दोनों के लिए) को छिपाने का कोई तरीका है जैसे कि चीजों को केवल एमएम फाइलों में डालकर उद्देश्य-सी में कोई भी कर सकता है? धन्यवाद। – Unheilig

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