//先构造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
如何实现sequence
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 一、如果让你实现属性的weak,如何实现的? PS: @property 等同于在.h文件中声明实例变量的get/...
- 前言 之前在 上篇[https://www.mghio.cn/post/558ca0bd.html] 提到过会实现...
- input搜索框相信大家在开发中用的很多,那么input框输入的事件大家用的是什么呢?大家肯定都使用过oninpu...
- 可见性 1lock指令对volatile修饰的变量,执行写操作的话,JVM会发送一条lock前缀指令给CPU,CP...