【发布时间】:2015-10-05 20:21:33
【问题描述】:
我一直在尝试扩展一个包含特定类型的 swift 数组。
protocol Node {
var nodeId: Int { get }
var parentId: Int? { get }
var children: [Node] { get set }
var level: Int { get set }
}
extension Array where Element : Node {
/**
unflatten an array of Nodes.
*/
func unflattenNodes()-> [Node] {
func unflatten(inout parent: Node?)-> [Node] {
var topNodes = [Node]()
let children = self.filter{ (child: Node) in return child.parentId == parent?.nodeId ?? 0 }
if !children.isEmpty {
if var parent = parent {
for var child in children {
child.level = parent.level + 1
}
parent.children = children
}
else {
topNodes = children
}
for child in children {
var optChild = Optional(child)
unflatten(&optChild)
}
}
return topNodes;
}
var optChild: Node? = nil
return unflatten(&optChild)
}
}
上面的代码不会被编译,因为“节点”不是“元素”的子类型,即使我正在扩展元素“节点”的数组。 如何快速存档我在这里尝试做的事情? 我正在尝试将实例方法添加到 [Node] 以展开自我。
【问题讨论】:
-
我刚试过,它奏效了。谢谢!