[英]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.