Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift通用类can';不分配给子类_Ios_Swift_Generics_Swift3 - Fatal编程技术网

Ios Swift通用类can';不分配给子类

Ios Swift通用类can';不分配给子类,ios,swift,generics,swift3,Ios,Swift,Generics,Swift3,我有A班: class A<T: MyTypeClass> { } 如果我写下这样的话: var variable: A<MyTypeClass> = B<MyTypeClassSubclass>() var variable: A<MyTypeClass> = B<MyTypeClassSubclass>() as! A<MyTypeClass> var变量:A=B()as!A. 编译器只给出警告,应用程序在运行

我有A班:

class A<T: MyTypeClass>
{
}
如果我写下这样的话:

var variable: A<MyTypeClass> = B<MyTypeClassSubclass>() 
var variable: A<MyTypeClass> = B<MyTypeClassSubclass>() as! A<MyTypeClass>
var变量:A=B()as!A.
编译器只给出警告,应用程序在运行时崩溃

我尝试过类型擦除,但它不起作用,因为在我的例子中,它是从A类巫婆开始的,它已经是通用的


如何解决此问题?

在处理泛型类型时,Swift中既不允许超类型也不允许子类型。在子类的上下文中使用泛型时,类型必须相同。

这可能有助于查看已发布的博客文章。简而言之,使这种协变是可能的(在Swift以外的语言中,如Scala),但要正确使用类型安全性是一种复杂的语言功能,Swift没有这种功能。你不能这样做。将子类与非平凡泛型混合在一起通常会使您陷入困境。通常,您应该重新设计协议或类型橡皮擦,而不是子类化来避免这种情况。
var variable: A<MyTypeClass> = B<MyTypeClassSubclass>() as! A<MyTypeClass>