5

我正在尝试在 Swift 中扩展类 NSDictionary 以包含在 init() 上设置的 NSDate。添加自定义 init() 时,出现编译器错误:

“必需”初始化程序“init(dictionaryLiteral:)”必须由“NSDictionary”的子类提供

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

来自扩展的声明还不能被覆盖

有什么方法可以覆盖 NSDictionary 的初始化程序,或者 Swift 还不能处理吗?

这是我的课:

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

1 回答 1

4

Swift 有一个官方的扩展机制来为类添加方法,但是当子类覆盖扩展方法时编译器会报错。不过,错误文本看起来很有希望(强调):

来自扩展的声明还不能被覆盖 正是这个悬而未决的“还”鼓励我相信 Apple 的工程师已经意识到受保护的扩展模式等设计模式,并将更新 Swift 以支持它们。

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

于 2015-02-20T19:41:49.047 回答