swift - 具有继承的泛型类

时间:2018-06-12 09:52:31

标签: swift generics

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

  

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

不通过泛型快速支持继承吗?有解决方法吗?

class Parent{ }

class Child:Parent{ }

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

var test:X<Parent> = X<Child>() //Compiler Error

1 个答案:

答案 0 :(得分:3)

在Swift中,泛型是不变的,例如无论X<A>X<B>之间的遗传关系如何,任何A永远不会被分配给B

尽管如此,这个规则有一些例外,关于数组和选项(以及其他一些类型):

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())

这些将编译(自Swift 3以来) - 但这些特殊情况由编译器的一些硬编码规则处理。