Swift:类型参数的继承

标签 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>不能“沮丧”成WorkingClassA<ParameterClassA> -- 我知道 Java 不允许,我希望 Swift 能够更好地支持此类构造。

Swift 是否有不同的方法来做到这一点,或者它根本 Not Acceptable ?对我来说,“向上转换”类型参数似乎很好,但可能有充分的理由不允许这样做?

谢谢!

最佳答案

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

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

关于Swift:类型参数的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080123/

相关文章:

swift - NSAttributedString 和表情符号 : issue with positions and lengths

java - 应用于方法参数的通用类型 - 避免类型删除

generics - (FS0193、FS1113)具有静态解析类型参数的 F# 向量类

ios - 如何使用 Swift 中的联系人框架获取手机号码的所有联系人?

ios - 在 iOS (Swift) 上使用当前选择的相机

ios - 在 Swift 中使用 RestKit 和 CoreData

c# - 如果类型 T 需要实例化,为什么通用类签名需要指定 new() ?

java - 扩展 Java 类并强制现有库使用扩展类

c++ - C++中的向上转型和向下转型

java - java中的隐式向上转型和显式向下转型