我是Swift的新手,我試圖用泛型來解決一些問題,但我遇到了奇怪的構建錯誤,我不明白。下面是示例代碼:Swift通用類型轉換?
class CJunk
{
var HowMuch:Int = 0
}
class CGarbage : CJunk
{
}
// This will not compile because:
// Cannot convert return expression of type 'CGarbage' to return type 'T'
func MakeGarbage<T:CJunk>(input:CJunk) -> T
{
let x: CGarbage = CGarbage()
x.HowMuch = input.HowMuch * 2;
return x;
}
OK,這似乎很奇怪,因爲CGargabe是CJunk ...讓我們嘗試一些更基本:
// Cannot convert return expression of type 'CJunk' to return type 'T'
func MakeGarbage<T:CJunk>(input:CJunk) -> T
{
let x: CJunk = CJunk()
x.HowMuch = input.HowMuch * 2;
return x;
}
編輯: 的問題是,在每種情況下,我都錯誤地試圖向上傾斜。這實際上與泛型無關,而與OOP基本原理更相關。另一個問題是我誤解了錯誤信息。糟糕!
''指定'T'是'CJunk'的(任意)*子類*,這就是爲什麼你不能返回CJunk或CGarbage的實例。 - 你想達到什麼目的? –
不是關於Swift中的泛型,而是關於基本上每種語言中的泛型。例如,你的代碼也不能在Java中工作。 – luk2302
@ A.R。第一個樣品還是第二個?第二個可能工作(不太熟悉C#泛型)。第一個不應該出於我在我的回答中提到的確切原因。 – luk2302