为什么各自类型参数符合继承关系的泛型类型本身是否符合类似关系?

时间:2017-09-30 01:30:03

标签: swift generics inheritance

在Swift中,如果你有SubType继承自某些SuperType,并且有GenericType<TypeParameter>可以接受任何一个类的TypeParameter个实例({ {1}}或SubType),为什么SuperType的实例无法转换为GenericType<SubType>

我听说过这种行为存在于其他语言中,我希望它存在于Swift中,所以我渴望在这里有所见解。

GenericType<SuperType>

1 个答案:

答案 0 :(得分:0)

我担心没有简单的出路...... 如果要将两个对象放在一个数组中,可以引入一些描述所需行为的协议

protocol MyProtocol {
    func someGenericFunction()
}

然后确保您的GenericType符合它。

class GenericType<TypeParameter>: MyProtocol {
    func someGenericFunction() {
        print(TypeParameter.self)
    }
}

那么..那么你可以用[MyProtocol]数组这样对象:

let instance = GenericType<SuperType>()
let subInstance = GenericType<SubType>()

instance.someGenericFunction() // prints "SuperType"
subInstance.someGenericFunction() // prints "SubType"

let array: [MyProtocol] = [instance, subInstance]
for object in array {
    object.someGenericFunction() // prints "SuperType", "SubType"
}