gpt4 book ai didi

Swift 通用转换错误

转载 作者:行者123 更新时间:2023-11-30 11:19:47 25 4
gpt4 key购买 nike

代码如下:

class Animall<T> {
var value: T?
}

protocol Type {
var name: String {get set}
}


class Duck: Type {
var name = "duck"
}

var d = Animall<Duck>()
var duck = Duck()
duck.name = "duck"
d.value = duck

if let finalD = d as? Animall<Type> {
print(finalD.value?.name)
}
else {
print("Can't Convert")
}

总是记录“无法转换”。我想知道原因。我很困惑。Duck 符合 Type 协议(protocol)。为什么不转换!

最佳答案

Animal<Duck>不是 Animal<Type> 的“子类”即使Duck符合协议(protocol)Type 。它们是不同的类,这是因为 Swift 泛型类型在其泛型参数方面是不变的。这意味着每次您引用 Animal对于不同的类型,无论继承如何,Animal “实例”实际上是不同的、不兼容的类型。

您可以通过将处理代码移至在 Type 上运行的通用函数来解决此“限制”。 :

func doSomething<T: Type>(with animal: Animal<T>) {
print(animal.value?.name)
}

doSomething(with: d)

关于Swift 通用转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com