// 继承 迭代器协议
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)
}
网友评论