如何实现sequence

//先构造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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容