我遇到了一个错误,我不确定它是否是Swift语言或bug的限制.这是最基本的前提:
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
Run Code Online (Sandbox Code Playgroud)
我这里没有编译器警告,但是Subclass拒绝实例化.我在子类化泛型的特定上下文中有一个更复杂的目标,但上面这个基本问题是我把它归结为.
有趣的是,如果我删除GenericClass上的NSObject继承(和泛型的init方法中的super.init()),这个设置没有问题,所以我认为它必须与我的事实有关继承自NSObject.我的完整实现必须继承自NSOperation(我基本上是使用泛型超类生成自定义的NSOperation类),所以从NSObject继承(即NSOperation)对我来说不是可选的.
令人讨厌的是没有编译器错误,我得到的东西和EXC_BAD_ACCESS一样令人讨厌.这让我觉得这可能是有用的,但目前还不行.我知道他们最近才开始支持Swift中泛型类的子类化.我正在运行最新的xCode beta 6.
有任何见解赞赏!