我想知道是否有可能允許方法接受泛型超類的任何子類。我已經發布了下面我想要實現的示例代碼。希望能夠更好地描述我的情況。Swift泛型 - 允許作爲參數傳遞的子類
import UIKit
class SuperDataClass {
}
class SubDataClass: SuperDataClass {
}
class SuperClass<T: SuperDataClass>: UITableViewCell {
}
class SubClass: SuperClass<SubDataClass> {
}
class Example {
func test(object: SuperClass<SuperDataClass>) {
print(object)
}
}
let object = SubClass()
Example().test(object: object)
當在操場上運行此,你會得到以下錯誤:
Playground execution failed: error: Generics.playground:20:24: error: cannot convert value of type 'SubClass' to expected argument type 'SuperClass<SuperDataClass>'
究其原因,據我所知,是數據類型的數據類型的子類預期的方法。
行更改15
class SubClass: SuperClass<SuperDataClass> {
將解決這個問題,但並不適用於我想要實現的方案。我希望該方法可以處理任何繼承SuperClass的對象,以便通過此方法處理。這可能嗎?是否有更好的設置,我應該用來實現這一目標?
謝謝。
感謝這個信息,我現在好奇我們如何能做類似的事情,但對於一個將返回類似項目的方法。 我正在嘗試一些方法,但尚未找出正確的方法來完成這項工作。 'FUNC返回類型() - >ü。鍵入{ 返回SubClass.self }' –
Steve
這不會因爲'T'工作和'U'可以是任何類型的滿足約束。你想要做什麼?另外,我懷疑這應該是一個單獨的問題。 @Steve – Sweeper
我同意,這是一個單獨的問題。基本上我希望通過解決上面的例子(你的答案確實解決了這個問題)能理解我是如何能夠傳遞一個通用超類的多個子類版本的。我有多個tableviewcell,每個tableviewcell都繼承了一個tableviewcell,它知道如何將數據放在自己的位置。每個子類的數據類型都不相同。這非常精細,我可能不會很好地解釋它。爲了解決這個問題,我們將繼續挖掘並嘗試新問題。謝謝。 – Steve