Swift Sequence实现

2019-07-09  本文已影响0人  烟影很美
// 继承 迭代器协议
class MyIterator<T>: IteratorProtocol {
    typealias Element = T
    var array: [Element]
    var currentIndex = 0
    init(array: [Element]) {
        self.array = array
    }
    
    func next() -> T? {
        if currentIndex >= self.array.count {
            return nil
        } else {
            let ele = self.array[currentIndex]
            currentIndex += 1
            return ele
        }
    }
}

// 继承 序列协议
class MySequence<T>: Sequence {
    var array: [T] = [T]()
    
    typealias Element = T
    typealias Iterator = MyIterator
    __consuming func makeIterator() -> MySequence.Iterator<T> {
        return MyIterator.init(array: array)
    }
    
    init(array:[T]) {
        self.array = array
    }
}

MySequence使用

let seq = MySequence.init(array: [1,2,3])
    for num in seq {
    print(num)
}
上一篇下一篇

猜你喜欢

热点阅读