如何实现sequence
2021-01-12 本文已影响0人
落入粪池的凤凰
//先构造iterator
class ReverseIterator<T>: IteratorProtocol {
var array: [T]
var currrentIndex = 0
init(arr:[T]) {
self.array = arr
currrentIndex = arr.count-1
}
func next() -> T? {
if currrentIndex < 0{
return nil
}else{
let index = currrentIndex
currrentIndex = currrentIndex - 1
return array[index]
}
}
typealias Element = T
}
//构造
class ReverseSequence<T>: Sequence {
var array: [T]
init(arr:[T]) {
self.array = arr
}
typealias Iterator = ReverseIterator<T>
func makeIterator() -> ReverseIterator<T> {
return ReverseIterator<T>(arr: self.array)
}
}
for (index,value) in ReverseSequence(arr: ["11231","2da","good"]).enumerated() {
print(index,value)
}
//0 good
//1 2da
//2 11231