我有一个链表类,声明如下:
class LinkedNode<T> {
let data: T
var next: LinkedNode<T>?
func traverseList(process: (LinkedNode<T>) -> ()) { ... }
}
我想要做的是扩展 Array 以拥有一个初始化程序,将我的链接节点类转换为链接节点数组。我试过这个:
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
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)