我需要在哪里提供Swift泛型占位符的类型?哪里没有必要?

时间:2018-04-12 17:11:13

标签: swift generics

对于下面的代码,我得到任何编译器错误,表明您需要指定Node的泛型类型(对于leftChild& rightChild)

class Node<T: Comparable>{

    var leftChild: Node? // WHY NO ERRORS?!
    var rightChild: Node? // WHY NO ERRORS?

    var value: T

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

    func addleft(node: Node){
        leftChild = node
    }

    func addright(node: Node){
        rightChild = node
    }
}

但是对于下面的结构,如果我没有指定泛型类型,我会收到错误。

struct LinkedList{
   var head: Node? // ERROR!
}
  

错误:对泛型类型'Node'的引用需要&lt; ...&gt;

中的参数

这是可以理解的。我知道我需要做类似的事情:

struct LinkedList<T:Comparable>{
    var head: Node<T> // NO Error!
}

那么为什么leftChild: Node?行没有抛出任何错误?!它是如何知道它的通用类型的?为什么没有必要这样写?

var leftChild: Node<T>?
var rightChild: Node<T>?

0 个答案:

没有答案