Arrays 如何扩展泛型类型的数组?

Arrays 如何扩展泛型类型的数组?,arrays,swift,generics,swift4,initializer,Arrays,Swift,Generics,Swift4,Initializer,我有一个链表类,声明如下: class LinkedNode<T> { let data: T var next: LinkedNode<T>? func traverseList(process: (LinkedNode<T>) -> ()) { ... } } 类链接节点{ 让数据:T 下一个变量:LinkedNode? func traverseList(进程:(LinkedNode)->(){…} } 我想做的

我有一个链表类,声明如下:

 class LinkedNode<T> {

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


    func traverseList(process: (LinkedNode<T>) -> ()) { ... }
}
类链接节点{
让数据:T
下一个变量:LinkedNode?
func traverseList(进程:(LinkedNode)->(){…}
}
我想做的是扩展数组,使其具有一个初始化器,该初始化器将我的LinkedNode类转换为一个链接节点数组。我试过这个:

extension Array where Element == LinkedNode<T> {

  init(node: LinkedNode<T>)
  {
      var result = [LinkedNode<T>]()
      traverseList { result.append($0) }
      return result
  }
}
扩展数组,其中元素==LinkedNode{
初始化(节点:LinkedNode)
{
变量结果=[LinkedNode]()
traverseList{result.append($0)}
返回结果
}
}
但这就产生了T未声明的错误。我试着把它拿出来做其他的事情,但都没有效果

我能够通过LinkedNode类上的方法获得相同的结果:

    func array() -> [LinkedNode<T>]
    {
        var result = [LinkedNode<T>]()
        traverseList { result.append($0) }
        return result
    }
func数组()->[LinkedNode]
{
变量结果=[LinkedNode]()
traverseList{result.append($0)}
返回结果
}

但是我更喜欢数组初始值设定项,因为有很多其他集合类型都有该初始值设定项。

您可以在初始值设定项定义中声明一个泛型参数

extension Array {

    init<T>(node: LinkedNode<T>)
        where Element == LinkedNode<T>
    {
        var result = [LinkedNode<T>]()
        node.traverseList { result.append($0) }
        self = result
    }
}
扩展数组{
初始化(节点:LinkedNode)
其中元素==LinkedNode
{
变量结果=[LinkedNode]()
node.traverseList{result.append($0)}
自我=结果
}
}

谢谢,成功了。您还演示了在初始化器中执行self=result,而不是返回result。