我试图在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")
}
}
答案 0 :(得分:4)
Swift有一个官方扩展机制,用于向类添加方法,但是当子类重写扩展方法时,编译器会启动错误。但错误文本看起来很有希望(强调补充):
来自扩展程序的声明无法覆盖尚未 悬挂“尚未”鼓励我相信Apple的工程师知道受保护的扩展模式等设计模式,并会更新Swift以支持它们。
检查 https://github.com/ksm/SwiftInFlux/blob/master/README.md#overriding-declarations-from-extensions