具有继承错误的泛型

Generics with inheritance error

我有 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 为什么我不能创建节点列表 并向其添加一个节点?

Swift 对类型很严格。当需要 Node<Pet> 时,您不能附加 Node<Dog>


你可以自己选择转换成需要的类型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 的更多详细信息。

如果你有这样的基础:

class Pet { }
class Cat: Pet { }
class Dog: Pet { }
class Tiger: Cat { }

public class Node<T> {
    public var value: T   
    public init(value: T) { self.value = value }
}

那么你可以这样做:

var list = [Node<Pet>]()
list.append(Node(value: Dog()))
list.append(Node(value: Cat()))
list.append(Node(value: Tiger()))