gpt4 book ai didi

swift - 具有继承错误的泛型

转载 作者:搜寻专家 更新时间:2023-11-01 06:17:51 25 4
gpt4 key购买 nike

我有 2 个对象进一步继承自同一个对象。还有一个进一步类型的通用对象。我想保存通用对象列表,但出现错误。

//Error: Cannot convert value of Type Node to expected argument type Node

代码:

class Pet {

}

class Cat: Pet {

}

class Dog: Pet {

}


public class Node<T> {
public var value: T

public init(value: T) {
self.value = value
}
}

var list = [Node<Pet>]()

//Error: Cannot convert value of Type Node<Dog> to expected argument type Node<Pet>
list.append(Node<Dog>(value: Dog()))

为什么会这样?有什么建议吗?


编辑:

如果 Dog 是 Kind Pet 为什么我不能创建一个 Node 列表并向其添加一个节点?

最佳答案

Swift 对类型很严格。您不能附加 Node<Dog>什么时候Node<Pet>是期待。


你可以自己选择性地转换为必要的类型Dog() as Pet :

list.append(Node(value: Dog()))
// or
list.append(Node<Pet>(value: Dog()))
// or
list.append(Node<Pet>(value: Dog() as Pet))

稍后如果你需要访问对象并获得正确的类型,你必须向下转型:

if let myDog = list[0].value as? Dog {
print("woff woff")
}

参见 working demo .

阅读有关 type casting 的更多详细信息.

关于swift - 具有继承错误的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40357507/

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