繁体   English   中英

如何为通用类型扩展Array?

[英]How to extend Array for generic type?

我有一个声明这样的链表的类:

 class LinkedNode<T> {

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


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

我想做的是扩展Array以具有将我的LinkedNode类转换为链接节点数组的初始化程序。 我尝试了这个:

extension Array where Element == LinkedNode<T> {

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

但这会导致未声明T的错误。 我尝试将其取出并做其他事情,但没有任何效果。

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

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

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

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

extension Array {

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM