Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
swift-具有继承的泛型类_Swift_Generics - Fatal编程技术网

swift-具有继承的泛型类

swift-具有继承的泛型类,swift,generics,Swift,Generics,当我尝试执行下面的代码时,我得到以下错误 错误:无法将类型“X”的值转换为指定类型 “X” swift不支持泛型继承吗?有解决办法吗 class Parent{ } class Child:Parent{ } class X<T>{ var name: String? } var test:X<Parent> = X<Child>() //Compiler Error 类父{} 类子级:父级{} X类{ 变量名称:字符串? } var test

当我尝试执行下面的代码时,我得到以下错误

错误:无法将类型“X”的值转换为指定类型 “X”

swift不支持泛型继承吗?有解决办法吗

class Parent{ }

class Child:Parent{ }

class X<T>{
    var name: String?
}

var test:X<Parent> = X<Child>() //Compiler Error
类父{}
类子级:父级{}
X类{
变量名称:字符串?
}
var test:X=X()//编译器错误
在Swift中,泛型是不变的,例如,无论
A
B
之间的继承关系如何,任何
X
都不会分配给
X

然而,对于数组和可选项(以及其他类型的mabye),该规则也有一些例外情况:

var array2:[Parent]=[Child]()
//同:
var array1:Array=Array()
var opt1:父级?=Child()
//同:
var opt2:Optional=可选(子())

这些将被编译(从Swift 3开始)-但这些是由编译器的一些硬编码规则处理的特殊情况。

您的最终目标是什么?如果不清楚你想要达到什么目的,就很难想出替代方案。嗨@DamiaanDufaux,确切的上下文有点复杂。但简而言之,我有一个方法,它应该能够返回X或XCan,你不需要为你的方法使用协议吗?创建新协议
P
,使类
X
符合
P
。然后使用
P
作为方法的返回类型。然后,您可以从方法中返回X以及X。我无法控制类X。它是在库中定义的。您可以通过扩展
extension X:P{…}
对此有任何解决方法吗?也许会有不同的定义?
var array2:[Parent] = [Child]()
// same as:
var array1:Array<Parent> = Array<Child>()

var opt1:Parent? = Child()
// same as:
var opt2:Optional<Parent> = Optional<Child>(Child())