簡體   English   中英

在Swift中對泛型類進行子類化失敗

[英]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> {}

通過使用它,一切正常。 所以我想確保泛型參數可以在C1C2 ,實際上它可以

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM