在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]!
答案 0 :(得分:2)
items
已Array<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]
}
}