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没有它。你不能这样做。将子类与非平凡的泛型混合在一起会让你进入一个角落。一般来说,您应该重新设计协议或键入橡皮擦,而不是继承以避免这种情况。 –