Swift:类型参数中的继承

时间:2016-05-06 19:33:02

标签: swift generics upcasting erasure

我试图将带有类型参数的类的对象转换为具有更通用类型参数的同一类的对象,如以下Swift代码所示:

class ParameterClassA {
}

class ParameterClassB: ParameterClassA {
}

class WorkingClassA<T> {
}

class WorkingClassB: WorkingClassA<ParameterClassB> {
}

let object1 = WorkingClassB()
let object2: WorkingClassA<ParameterClassA> = object1

不幸的是,也许正如预期的那样,这不起作用,因为WorkingClassA<ParameterClassB>不能&#34;低估&#34;进入WorkingClassA<ParameterClassA> - 我知道Java不允许它,我希望Swift可以更好地支持这样的结构。

有没有不同的方法来做到这一点是Swift,还是只是不可接受?对我来说,#up;&#34; upcast&#34;类型参数,但可能有充分的理由不允许它?

谢谢!

1 个答案:

答案 0 :(得分:0)

尽管这种事情可能很方便,但这并不是真正的泛型。

对于编译器,每个泛型都是不同的类型,并且(当前)与它的兄弟泛型类型无关。这意味着将WorkingClassA<ParameterClassB>投射到WorkingClassA<ParameterClassA> 与铸造没有什么不同 WorkingClassA<ParameterClassB>WorkingClassA<String>WorkingClassA<Int>