如何为泛型类型扩展数组?

How to extend Array for generic type?

我有一个 class 用于这样声明的链表:

 class LinkedNode<T> {

    let data: T
    var next: LinkedNode<T>?


    func traverseList(process: (LinkedNode<T>) -> ()) { ... }
}

我想要做的是扩展 Array 以拥有一个将我的 LinkedNode class 转换为链接节点数组的初始化程序。我试过这个:

extension Array where Element == LinkedNode<T> {

  init(node: LinkedNode<T>)
  {
      var result = [LinkedNode<T>]()
      traverseList { result.append([=11=]) }
      return result
  }
}

但这给出了 T 未声明的错误。我试过把它拿出来做其他事情,但没有任何效果。

我能够使用 LinkedNode 上的方法获得相同的结果 class:

    func array() -> [LinkedNode<T>]
    {
        var result = [LinkedNode<T>]()
        traverseList { result.append([=12=]) }
        return result
    }

但我更喜欢数组初始化器,因为许多其他集合类型都有该初始化器。

您可以在初始化程序定义中声明泛型参数。

extension Array {

    init<T>(node: LinkedNode<T>)
        where Element == LinkedNode<T>
    {
        var result = [LinkedNode<T>]()
        node.traverseList { result.append([=10=]) }
        self = result
    }
}