0
我有A類:斯威夫特泛型類不能分配給子類
class A<T: MyTypeClass>
{
}
和B類
class B<T: MyTypeClassSubclass>: A<T>
{
}
讓我們說MyTypeClassSubclass
延伸MyTypeClass
斯威夫特不讓我去做一些事情吧:
var variable: A<MyTypeClass> = B<MyTypeClassSubclass>()
,如果我寫的東西,如:
var variable: A<MyTypeClass> = B<MyTypeClassSubclass>() as! A<MyTypeClass>
編譯器給出的只是一個警告,在運行應用程序崩潰。
我試過擦除類型,但它不起作用,因爲在我的情況下,它是從類開始的巫婆已經是通用的了。
我該如何解決這個問題?
This [Swift:將泛型類型轉換爲相同的泛型類型,但具有關聯類型的子類](http://stackoverflow.com/questions/33752968/swift-cast-generic-type-into-same-generic-type -but-with-a-sub-of-associate)可能會有所幫助 –
尤其請參閱發表的博客文章。 https://www.mikeash.com/pyblog/friday-qa-2015-11-20-covariance-and-contravariance.html。簡單的回答是,使這種協變是可能的(除了Swift以外的其他語言,如Scala),但它是一種複雜的語言功能,可以正確處理類型安全,而Swift沒有它。你不能這樣做。將子類與非平凡的泛型混合在一起會讓你進入一個角落。一般來說,您應該重新設計協議或鍵入橡皮擦,而不是繼承以避免這種情況。 –