Swift

2015-02-20 15 views
5

'daki NSDictionary başlatıcısını geçersiz kılmıyor, init() üzerinde ayarlanmış bir NSDate içermek için Swift'deki NSDictionary sınıfını genişletmeye çalışıyorum. Benim özel init() eklediğinizde, ben derleyici hatası alıyorum: Ben otomatik tamamlama kullanarak o başlatıcı eklerken, AncakSwift

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

, aşağıdaki hatayı alıyorum:

Declarations from extensions cannot be overridden yet

var mı uygulanıyor NSDictionary başlatıcısı geçersiz kılmak için yolu veya Swift henüz bu işlemek değil?

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") 
    } 
} 

cevap

4

Swift sınıflara yöntemleri ekleyerek için resmi uzatma mekanizması vardır, ama bir alt sınıf bir uzantısı yöntemi geçersiz kılar zaman derleyici bir hata atarak:

İşte benim sınıfı. (Vurgu eklenmiştir) gerçi hata metni, umutlu görünüyor: uzantılarından

Beyannameler geçersiz kılınamaz henüz Bu kadar Apple'ın mühendisleri korumalı uzantısı gibi tasarım desenleri farkında olduğuna inanmak için beni teşvik eden “henüz” sarkan desen ve onları desteklemek için Swift'i güncelleyecektir. https://github.com/ksm/SwiftInFlux/blob/master/README.md#overriding-declarations-from-extensions

+2

Kontrol Bu yüzden Swift NSDictionary için başlatıcı geçersiz kılmak henüz mümkün değil sanırım. Derleyici, 'init (dictionaryLiteral :)' seçeneğini geçersiz kılmayı gerektirir, ancak aynı zamanda buna izin vermez. Umarım Swift yeteneği kısa zamanda ekler. – Mel

+0

Elma yapraklılığı! –

+0

Hala ** değil ** Swift 4 ile düzeltildi. –