Implementing recursive generator for simple tree structure in Swift

前端 未结 3 604
半阙折子戏
半阙折子戏 2021-01-13 18:36

I have a simple tree structure in memory based on an XML document and I am trying to write a recursive generator to support SequenceType, but I am stuck on how

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-13 19:26

    Here is a recursive post-order generator. Can't say I'd recommend actually using it though. @MartinR's answer seems a bit more practical

     public func generate() -> AnyGenerator {
        var childGenerator:AnyGenerator?
        var childArrayGenerator:IndexingGenerator<[XMLNode]>? = self.childNodes.generate()
        var returnedSelf = false
    
        return anyGenerator {
            if let next = childGenerator?.next() {
                return next
            }
            if let child = childArrayGenerator?.next() {
                childGenerator = child.generate()
                return childGenerator?.next()
    
            } else if !returnedSelf {
    
                returnedSelf = true
                return self
    
            } else {
    
                return nil
            }
        }
    }
    

提交回复
热议问题