使用 GeneratorOf 结构实现 SequenceType 的自定义列表数据结构

Custom List data structure implementing SequenceType with using of GeneratorOf struct

我试图理解生成器和序列,这让我产生了实现自己的列表数据结构和实现协议以使用 forIn 循环的想法。我的代码:

class GSList<T> : SequenceType
{
    var Next : GSList<T>?
    var Value : T

    init(_ value: T, next : GSList<T>?)
    {
        self.Value = value
        self.Next = next
    }

    func add(list: GSList<T>)
    {
       if (self.Next != nil)
       {
            self.Next?.add(list)
       } else
       {
            self.Next = list
       }
    }

    typealias Generator = GeneratorOf<GSList<T>>

    func generate() -> Generator
    {
        var current: GSList<T>? = self
        println(current?.Value)

        return GeneratorOf
            { () -> GSList<T>? in

                let returnValue = current
                current = self.Next
                println(self.Value)
                println(current?.Value)
                return returnValue
        }
    }
}


var list1 = GSList(1, next: nil)
var list2 = GSList(2, next: nil)
var list3 = GSList(3, next: nil)
var list4 = GSList(4, next: nil)
var list5 = GSList(5, next: nil)


list1.add(list2)
list1.add(list3)
list1.add(list4)
list1.add(list5)

var generator = list1.generate()

generator.next()
generator.next()
generator.next()
generator.next()
generator.next()

它没有任何编译时错误,但问题是 current 变量未更新为 generate() 方法中的 Next 值:

func generate() -> Generator
        {
            var current: GSList<T>? = self
            println(current?.Value)

            return GeneratorOf
                { () -> GSList<T>? in

                    let returnValue = current
                    current = self.Next
                    println(self.Value)
                    println(current?.Value)
                    return returnValue
            }
        }

所以调用下一个 generator.next() 总是 returns 第一个项目。

我怎样才能避免这种情况?

你的线路

current = self.Next

应该是

current = current?.Next