Sequence 序列

2017-02-03  本文已影响20人  fordring2008

手动实现一个序列

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

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}

上一篇下一篇

猜你喜欢

热点阅读