我一直試圖擴展包含特定類型的swift數組。擴展包含特定元素類型的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)
}
}
上面這段代碼不會被編譯,因爲「節點」不是「元素」的亞型,即使我延伸部件的「節點」的陣列。 如何將我想要在swift中執行的操作歸檔? 我想添加一個實例方法到[Node]來解除自我。
你有沒有試過http://stackoverflow.com/questions/31806324/extend-array-types-using-where-clause-in-swift? – Paulw11
我只是試過,它的工作。謝謝! – kazuochi