无法在Swift中覆盖NSDictionary的初始化程序

时间:2015-02-20 19:19:21

标签: swift nsdictionary swift-extensions

我试图在Swift中扩展类NSDictionary以包含在init()上设置的NSDate。当我添加自定义init()时,我得到了编译器错误:

  

'需'初始化程序&#init;(dictionaryLiteral:)'必须提供   &NSCictionary'

的子类

但是,当我使用自动完成添加初始化程序时,我收到以下错误:

  

扩展声明无法覆盖

有没有办法覆盖NSDictionary的初始化程序,或者Swift只是不能处理它?<​​/ p>

这是我的班级:

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

1 个答案:

答案 0 :(得分:4)

Swift有一个官方扩展机制,用于向类添加方法,但是当子类重写扩展方法时,编译器会启动错误。但错误文本看起来很有希望(强调补充):

来自扩展程序的声明无法覆盖尚未 悬挂“尚未”鼓励我相信Apple的工程师知道受保护的扩展模式等设计模式,并会更新Swift以支持它们。

检查 https://github.com/ksm/SwiftInFlux/blob/master/README.md#overriding-declarations-from-extensions