手动实现一个序列
//手动实现一个迭代器,这是一个迭代器类
class ReverseIterator :IteratorProtocol{
typealias Element =T
var array : [Element]
var currentIndex =0
init(array: [Element]) {
self.array= array
currentIndex= array.count-1
}
func next() ->T? {
if currentIndex<0{
return nil
}else{
let element =array[currentIndex]
currentIndex-=1
return element
}
}
}
///手动实现一个序列,类似一个Array
structReverseSequence :Sequence{
vararray : [T]
init(array:[T]) {
self.array= array
}
typealiasitertor =ReverseIterator
funcmakeIterator() ->ReverseIterator {
returnReverseIterator(array:self.array)
}
}
//测试
letarray1 =ReverseSequence(array: [1,2,3,4])
foriteminarray1{
print(item)
}
// for循环的实际执行情况等同于下面
variterator =array1.makeIterator()
whileletobj =iterator.next() {
print(obj)
}
// map方法
letarray2 =array1.map{return$0 *10}