0

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

class ParameterClassA {
}

class ParameterClassB: ParameterClassA {
}

class WorkingClassA<T> {
}

class WorkingClassB: WorkingClassA<ParameterClassB> {
}

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

不幸的是,也许正如预期的那样,这不起作用,因为WorkingClassA<ParameterClassB>不能“沮丧”成WorkingClassA<ParameterClassA>——我知道 Java 不允许这样做,我希望 Swift 能够更好地支持这样的结构。

有没有其他方法可以做到这一点是 Swift,还是根本不可接受?对我来说,“向上转换”类型参数似乎很好,但可能有充分的理由不允许它?

谢谢!

4

1 回答 1

0

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

对于编译器,每个泛型都属于不同的类型,并且(当前)与其同级泛型类型无关。这意味着投射WorkingClassA<ParameterClassB>到与投射到或WorkingClassA<ParameterClassA> 没有什么不同 WorkingClassA<ParameterClassB>WorkingClassA<String>WorkingClassA<Int>

于 2016-05-06T20:09:00.637 回答