[英]Subclassing Swift Generic Class with NSObject inheritance
我遇到了一個錯誤,我不確定它是否是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
我這里沒有編譯器警告,但是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>")
一個混亂的解決方法可能是使用默認協議實現,然后擴展NSOperation
以從您的協議初始化新操作,但最好只提交錯誤報告並等待他們修復此問題:)
import Foundation
class GenericClass<T> : NSObject {
var inputValue: T
init(value: T) {
print(value)
inputValue = value
super.init()
}
}
class SubClass<T> : GenericClass<T> {
override init(value: T) {
super.init(value: value)
}
}
let test = GenericClass(value: "test") //Succeeds
test.inputValue
let test2 = SubClass(value: "test2") //Succeeds
test2.inputValue
let test3 = GenericClass(value: 3.14) //Succeeds
test3.inputValue
let test4 = SubClass(value: 3.14) //Succeeds
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.