Init类派生自协议

时间:2015-07-31 12:35:17

标签: swift

我有一个来自简单协议的类。它看起来像这样:

protocol Interface {
    func f() -> Void;
}
class TestInterface : Interface {
    var arr: [Int] = [];
    func f() {
        // stuff
    }
}

不幸的是,我不能创建这个类,因为Swift没有初始化程序(虽然默认的一个就足够了)。

但是,更严重的问题是尝试定义初始化程序。最初我尝试定义一个空的初始化程序。 Swift告诉我这是非法的,因为我没有调用超级初始化程序(即使它是一个协议......)。很好,我想。我打电话给super.init()。然后Swift告诉我这是非法的,因为base是一个协议而不是一个类,所以它没有init函数。所以我不能定义一个init函数,因为我必须在我自己的init函数中调用一个不存在的init函数。并且正常的init函数随机无法使用。

我怎么能创建一个超级简单类的实例?

1 个答案:

答案 0 :(得分:0)

这实际上是一个完全不相关的问题。该协议实际上曾经是一个类。由于一个不相关的原因,导入此类的模块崩溃了Swift编译器,并破坏了元数据。因此,当Swift开始阅读此类/协议的元数据时,它与编译器不一致并且混淆了。

一旦我解决了源模块的问题(实际上已经注意到它,感谢糟糕的XCode错误报告),这对我来说不再是一个问题。