我遇到了一个错误,我不确定它是否是Swift语言的限制或错误。这里是最基本的前提:继承NSObject继承Swift通用类
class GenericClass<T> : NSObject {
var inputValue: T
init(value: T) {
self.inputValue = value
super.init()
}
}
class SubClass : GenericClass<String> {
override init(value: String) {
super.init(value: value)
}
}
var test = GenericClass(value: "test") //Succeeds
var test2 = SubClass(value: "test2") //Fails with EXC_BAD_ACCESS
我在这里没有编译器警告,但是子类拒绝实例化。在泛型的具体环境的子类中,我有一个更复杂的目标,但是上面这个基本问题正是我所要解决的。有趣的是,如果我删除GenericClass上的NSObject继承(以及泛型的init方法中的super.init()),这个设置没有问题,所以我认为它必须与事实有关我从NSObject继承。我的完整实现必须从NSOperation继承(我基本上用一个通用的超类来自定义NSOperation类),因此从NSObject继承(即NSOperation)对我来说不是可选的。
令人烦恼的是,没有编译器错误,我得到的东西与EXC_BAD_ACCESS一样讨厌。这让我觉得这也许应该是有效的,但目前还不是。我知道他们最近才开始在Swift中支持泛型类的子类化。我正在运行最新的xCode beta 6.
任何洞察赞赏!
感谢您的回复亚伦。我同意,它闻起来像一个错误。我提交了一个错误报告。我们将看到会发生什么:)在此期间将给你的协议想法一个镜头。 – erendiox
是的,我相信这确实是一个错误。现在已经在Swift 3中修复了,在Swift 3语言变更中没有提及它:https://swift.org/blog/swift-3-0-released/ – ganzogo