在Swift中,如果你有SubType
继承自某些SuperType
,并且有GenericType<TypeParameter>
可以接受任何一个类的TypeParameter
个实例({ {1}}或SubType
),为什么SuperType
的实例无法转换为GenericType<SubType>
?
我听说过这种行为存在于其他语言中,我希望它存在于Swift中,所以我渴望在这里有所见解。
GenericType<SuperType>
答案 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"
}