问题背景:我有一个类是NSArray的子类,不是直接但它是。
结构或多或少与此MyClass -> Class1 -> Class2 -> NSArray
相似。
除MyClass
之外的所有内容都在Objective-C中,MyClass在Swift中。它运行良好,直到我升级到Yosemite和Xcode 6.1。
现在,在编译期间它会抛出错误
'required' initializer 'init(arrayLiteral:)' must be provided by subclass of 'NSArray'
这很奇怪,因为还有其他类,MyClass
的兄弟姐妹没有编译器抱怨他们。
当我添加初始化程序时,
required convenience init(arrayLiteral elements: AnyObject...) {
fatalError("not implemented")
}
XCode抛出另一个错误Declarations from extensions cannot be overridden yet
。
有人知道我该怎么办?代码完全没有变化。
答案 0 :(得分:2)
您可能只是看不到其他文件中的编译错误,因为编译会尝试在第一个有问题的文件处停止。
如果未在子类中指定任何指定的初始值设定项,或者如果覆盖所有指定的初始值设定项但没有方便初始值设定项,则会自动继承有问题的初始值设定项。在这种情况下,编译很好:
class MyArray1: NSArray {
override init() { fatalError("todo") }
override init(objects: UnsafePointer<AnyObject?>, count cnt: Int) { fatalError("todo") }
required init(coder aDecoder: NSCoder) { fatalError("todo") }
}
class MyArray2: MyArray1 {
}
这在Xcode 6.1上编译得很好。
请参阅The Swift Programming Guide中的Automatic Initializer Inheritance。