我在内存中有一个基于XML文档的简单树形结构,并尝试编写一个递归生成器来支持SequenceType
,但我卡在了如何实际操作上。
这是我的第一次尝试:
@objc public class XMLNode: NSObject, SequenceType {
public weak var parentNode: XMLNode?
public var nodeName: String
public var attributes: [String: String]
public var childNodes = [XMLNode]()
public func generate() -> AnyGenerator<XMLNode> {
var childGenerator = childNodes.generate()
var returnedSelf = false
return anyGenerator {
let child = childGenerator.next()
if child != nil {
// I need to somehow recurse on child here
return child
} else if !returnedSelf {
returnedSelf = true
return self
} else {
return nil
}
}
}
}
自
childNodes
是一个数组,我调用它内置的generate()
函数来创建子节点的生成器并迭代它,然后在结尾返回self
。问题是它没有递归每个子节点,所以它只深入了一层。我无法想出如何将两个生成器组合起来。我很难理解如何做到这一点!我需要做什么来创建一个递归生成器?
childNodes
是如何定义的?return self
中的self
是什么?也许您可以提供一个(简化的)自包含的树结构示例,这将更容易找到(和测试)可能的解决方案。 - Martin R