如何扩展通用类型的数组? [英] How to extend Array for generic type?
问题描述
class LinkedNode< T>< p> {
让数据:T
var next:LinkedNode< T> ;?
$ b $ func traverseList(process:(LinkedNode< T>) - >()){...}
}
我想要做的就是将Array扩展为具有一个将我的LinkedNode类转换为一个链接节点数组的初始化程序。我试过这个:
扩展数组其中Element == LinkedNode< T> {
init(node:LinkedNode< T>)
{
var result = [LinkedNode< T>]()
traverseList {result.append($ 0) }
返回结果
}
}
但是, T是未申报的。我试图把它拿出来做其他事情,但没有任何成效。
我能够通过LinkedNode类中的方法获得相同的结果:
func array() - > [LinkedNode< T>
{
var result = [LinkedNode< T>]()
traverseList {result.append($ 0)}
返回结果
}
但我更喜欢数组初始化器,因为很多其他集合类型都有这个初始化器。
您可以在初始化程序定义中声明泛型参数。
< $ node
$ init< T>(node:LinkedNode< T>)
其中Element == LinkedNode< T>
{
var result = [LinkedNode< T>]()
node.traverseList {result.append($ 0)}
self = result
}
}
I have a class for a linked list declared like this:
class LinkedNode<T> {
let data: T
var next: LinkedNode<T>?
func traverseList(process: (LinkedNode<T>) -> ()) { ... }
}
What I want to do is extend Array to have an initialiser that converts my LinkedNode class to an array of linked nodes. I tried this:
extension Array where Element == LinkedNode<T> {
init(node: LinkedNode<T>)
{
var result = [LinkedNode<T>]()
traverseList { result.append($0) }
return result
}
}
But that gives errors that T is undeclared. I have tried taking it out and doing other things, but nothing has worked.
I was able to get the same results with a method on the LinkedNode class:
func array() -> [LinkedNode<T>]
{
var result = [LinkedNode<T>]()
traverseList { result.append($0) }
return result
}
But I would prefer an array initialiser since so many other collection types have that initialiser.
You can declare a generic parameter in initializer definition.
extension Array {
init<T>(node: LinkedNode<T>)
where Element == LinkedNode<T>
{
var result = [LinkedNode<T>]()
node.traverseList { result.append($0) }
self = result
}
}
这篇关于如何扩展通用类型的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!