当我尝试执行下面的代码时,我收到以下错误
错误:无法将“X”类型的值转换为指定类型 'X'
不通过泛型快速支持继承吗?有解决方法吗?
class Parent{ }
class Child:Parent{ }
class X<T>{
var name: String?
}
var test:X<Parent> = X<Child>() //Compiler Error
答案 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以来) - 但这些特殊情况由编译器的一些硬编码规则处理。