如何在Swift中创建一个loopable类?

时间:2014-09-23 17:22:00

标签: generics swift

在Swift中,我创建了自己的容器类,它就像一个数组。我似乎无法弄清楚如何制作它所以我可以循环它。

class List<T> {
    var items = [T]();
    func add(allItems:T...){
        items += allItems
    }
    subscript(i:Int) -> T? {
        return items[i]
    }
}

var l = List<Int>()
l.add(1,2,3,4)
l[2]! //3

我以为我应该采用SequenceType协议并创建一个返回某些实现某种生成器的生成器。

如果我采用SequenceType协议I并编写生成函数,我会收到T不符合_CollectionType类型的错误。

我失败的尝试:

class List<T>:SequenceType {
    var items = [T]();
    func add(allItems:T...){
        items += allItems
    }

    func generate() -> GeneratorType<T>.Element {
        return IndexingGenerator()
    }

    subscript(i:Int) -> T? {
        return items[i]
    }
}

var l = List<Int>()
l.add(1,2,3,4)
l[2]!

1 个答案:

答案 0 :(得分:2)

itemsArray<T>已实施SequenceType,那么为什么不将调用传递给您的generate()函数:

class List<T>: SequenceType {
    var items = [T]();
    func add(allItems:T...){
        items += allItems
    }

    func generate() -> IndexingGenerator<Array<T>> {
        return items.generate()
    }

    subscript(i:Int) -> T? {
        return items[i]
    }
}