Swift:奇怪的XCode行为,在NSArray的子​​类中需要初始化程序

时间:2014-10-20 11:31:33

标签: ios objective-c xcode swift compilation

问题背景:我有一个类是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

有人知道我该怎么办?代码完全没有变化。

1 个答案:

答案 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