Sequence 序列

手动实现一个序列

//手动实现一个迭代器,这是一个迭代器类

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}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容