Generics 如何在Swift中创建可循环类?

Generics 如何在Swift中创建可循环类?,generics,swift,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

在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

items
是一个
数组
,它已经实现了
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]
    }
}
类列表:SequenceType{
var项目=[T]();
功能添加(所有项目:T…){
项目+=所有项目
}
func generate()->索引生成器{
返回项目。生成()
}
下标(i:Int)->T{
退货项目[i]
}
}

您还需要指定生成器typealias以完全实现SequenceType协议:
typealias Generator=GeneratorOf
@drewag我也这么认为,但在这种情况下,如果没有它,它似乎可以正常工作;编译器必须能够推断它。
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]
    }
}