ere*_*iox 9 generics xcode exc-bad-access nsobject swift
我遇到了一个错误,我不确定它是否是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.
有任何见解赞赏!
我很确定这是一个错误。有趣的是,如果删除初始值设定项,即使您继承自:,一切都会正常工作NSObject:
class GenericClass<T> : NSObject {
}
class SubClass : GenericClass<String> {
}
var test : GenericClass<Int> = GenericClass() // Succeeds
var test2 = SubClass() // Succeeds
var test3 : GenericClass<String> = SubClass() // Succeeds
var test4 : GenericClass<Int> = SubClass() // Fails ("cannot convert SubClass to GenericClass<Int>")
Run Code Online (Sandbox Code Playgroud)
一个混乱的解决方法可能是使用默认协议实现,然后扩展NSOperation以从协议初始化新操作,但最好只提交错误报告并等待他们修复此问题:)
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |