2015-02-20 9 views
5

में एनएस डिक्शनरी के प्रारंभकर्ता को ओवरराइड नहीं कर सकता है मैं स्विफ्ट में कक्षा एनएस डिक्शनरी को एनआईटीडी() पर स्थापित एनएसडीएट रखने के लिए प्रयास कर रहा हूं। जब मैं अपने कस्टम init() जोड़ने के लिए, मैं संकलक त्रुटि मिलती है:स्विफ्ट

'required' initializer 'init(dictionaryLiteral:)' must be provided by subclass of 'NSDictionary'

हालांकि, जब मुझे लगता है कि प्रारंभकर्ता स्वत: पूर्ण का उपयोग कर जोड़ने के लिए, मैं निम्नलिखित त्रुटि मिलती है:

Declarations from extensions cannot be overridden yet

वहाँ किसी भी है NSDictionary के प्रारंभकर्ता को ओवरराइड करने का तरीका या स्विफ्ट कर सकते हैं अभी तक इसे संभाल नहीं सकते?

यहाँ मेरी कक्षा है:

class DateParam : NSDictionary { 
    let date : NSDate 

    init(date: NSDate) { 
     super.init() 
     self.date = date 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    required convenience init(dictionaryLiteral elements: (NSCopying, AnyObject)...) { 
     fatalError("init(dictionaryLiteral:) has not been implemented") 
    } 
} 

उत्तर

4

स्विफ्ट वर्गों के लिए विधियां जोड़ने के लिए एक आधिकारिक विस्तार प्रणाली है, लेकिन जब एक उपवर्ग एक विस्तार विधि को ओवरराइड करता है संकलक एक त्रुटि ऊपर की शुरूआत की। त्रुटि पाठ उम्मीद लग रहा है, हालांकि (जोर जोड़ा):

एक्सटेंशन से

घोषणाएं ओवरराइड नहीं किया जा सकता है अभी तक यह है कि "अभी तक" झूलते है कि मुझे विश्वास है कि एप्पल के इंजीनियरों संरक्षित एक्सटेंशन की तरह डिजाइन पैटर्न के बारे में पता कर रहे हैं प्रोत्साहित करती है पैटर्न और उन्हें समर्थन देने के लिए स्विफ्ट अपडेट करेंगे।

चेक https://github.com/ksm/SwiftInFlux/blob/master/README.md#overriding-declarations-from-extensions

+2

तो मुझे लगता है कि यह स्विफ्ट में NSDictionary के लिए प्रारंभकर्ता ओवरराइड करने के लिए संभव अभी तक नहीं है। शिकायतकर्ता के लिए आवश्यक है कि आप 'init (dictionaryLiteral :)' को ओवरराइड करें लेकिन साथ ही इसे अनुमति नहीं देता है। मुझे उम्मीद है कि स्विफ्ट जल्द ही क्षमता को जोड़ देगा। – Mel

+0

ऐप्पल लापरवाही! –

+0

अभी भी ** नहीं ** स्विफ्ट 4 के साथ तय किया गया है। –