2016-05-06 35 views
0

我試圖投與一類參數的類的對象到相同類的對象與更通用的類型參數,如下面的銀行代碼中所示:夫特:在類型繼承參數

class ParameterClassA { 
} 

class ParameterClassB: ParameterClassA { 
} 

class WorkingClassA<T> { 
} 

class WorkingClassB: WorkingClassA<ParameterClassB> { 
} 

let object1 = WorkingClassB() 
let object2: WorkingClassA<ParameterClassA> = object1 

不幸的是,也許和預期的一樣,這是行不通的,因爲WorkingClassA<ParameterClassB>不能「downcast」到WorkingClassA<ParameterClassA> - 我知道Java不允許它,我希望Swift可能會更好地支持這樣的構造。

是否有不同的方式來做到這一點是斯威夫特,或者它是不可接受的?對我來說,「向上」類型參數似乎很好,但是可能有不允許的原因嗎?

謝謝!

回答

0

就像這樣的事情可能會很方便,這不是真正意義上的泛型。

對於編譯器,每個泛型都是不同的類型,並且(當前)與它的同類泛型類型無關。這意味着鑄造WorkingClassA<ParameterClassB>WorkingClassA<ParameterClassA> 沒有比鑄造 WorkingClassA<ParameterClassB>WorkingClassA<String>WorkingClassA<Int>

不同