[英]Subclassing generic class in Swift fails
我對通用編程很新,我遇到了Swift 3的問題並且繼承了泛型類。 我把這一切都剝奪了一個簡單的案例,但是我希望有人可以幫助解釋我為什么會失敗。
使用以下協議和類,一切正常。 這是有效的(我的真實代碼有很多進展,但工作正常):
protocol P {
associatedtype T
}
class Temp<X> {}
class C1<D:P> {
init(tmp: Temp<D.T>) {}
}
但是,當我的子類如下:
class C2<L:P> : C1<L> {}
我得到這個編譯器失敗:
<unknown>:0: error: expression type 'Temp<_>' is ambiguous without more context
錯誤不在特定行上,而是出現在編譯器活動日志中的失敗。
也許有一些我想念的簡單,但我只是沒有看到它。 我的子類與基類具有相同的約束(也就是說,它必須采用協議P),所以在我看來這應該有效。
有什么想法嗎?
我首先說我無法弄清楚為什么你的問題正在發生,但我希望這可以幫助你
讓我們從C1
類開始吧。
class C1<D: P> {}
通過使用它,一切正常。 所以我想確保泛型參數可以在C1
和C2
,實際上它可以
class C1<D: P> {
// it compiles
let something: D.T? = nil
// it compiles
func doSomething(using parameter: D.T) {
}
// do not compile
init(_ some: D.T) {
}
}
最后,如果你覆蓋C2
類中的init
,代碼最終會編譯。 我認為它實際上可能是一個編譯器問題,我會嘗試為此提交雷達。 我其實還不知道還有什么可以嘗試的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.