博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何创建一个 Sequence
阅读量:7175 次
发布时间:2019-06-29

本文共 1423 字,大约阅读时间需要 4 分钟。

Sequence 其实在coding中经常使用到,比如在使用 ArraySetDictionary,这些数据类型中,就会使用到。

那么什么是 Sequence 呢?

Sequence 是一系列相同数据的集合,并且具有迭代能力。

常见的 Sequence 是 for _ in ... 循环了,它会遍历整个要输出的对象。

let lists = [...]for list in lists {    print(list)}复制代码

这是常见的一个循环 lists 集合的例子,他会依次输出lists中的值。

为什么他们具有迭代输出的能力了,原因是他们遵循了 Sequence 协议

Sequence 协议部分内容

associatedtype Iterator : IteratorProtocolpublic func makeIterator() -> Self.Iterator复制代码
  • 这个方法要求返回一个 Iterator ,Iterator是一个 IteratorProtocol 协议

IteratorProtocol 协议内容

associatedtype Elementpublic mutating func next() -> Self.Element?复制代码
  • 这个方法会持续返回基础序列中的下一个值,否则返回 nil

那么也就是说,如果我们要自己实现一个 Sequence ,必须要遵循两点

  • 实现 makeIterator() 方法
  • 创造一个IteratorProtocol的实现

其实一个数组的运行过程也就是一下代码:

let result = books.makeIterator()while let rs = result.next() {}复制代码

在数组遍历时,流程大概也可以推测出来

  • 首先数组调用了 makeIterator() 方法
  • 然后再去调用 next() 方法

在 Swift4.1 中,我使用以下方法也能达成一个 Sequence

struct Books: Sequence, IteratorProtocol {    let names: [String]    private var idx = 0        init(names: [String]) {        self.names = names    }        mutating func next() -> String? {        guard idx < names.count else {            return nil        }        defer {            idx += 1        }        return names[idx]    }}复制代码

此方法值得注意的是

  • 我把 idx当前下标值 私有化,因为是我不想在初始化使用时,外部去干扰内部的idx
  • 在初始化时只传入书名称 定义了一个方法 init(names: [String])

最后的调用

func showResult() {    for result in Books(names: ["A", "B", "C", "D"]) {        print(result)    }}// A// B// C// D复制代码

如果觉得我的做法不妥,欢迎指正。

转载地址:http://lmpzm.baihongyu.com/

你可能感兴趣的文章
Wireshark的https代理抓包(whistle中间人代理)
查看>>
redhat下安装Wineqq2012
查看>>
linux下配置pptp 客户端
查看>>
java发送短信至手机
查看>>
rsyslog+loganalyzer+evtsys搭建集中式监控系统
查看>>
Python 学习笔记之函数
查看>>
mysql-mmm高可用架构
查看>>
使用shell脚本搭建源码LAMP环境
查看>>
我的友情链接
查看>>
关于VMware上Linux克隆后网卡名称修改的操作
查看>>
[置顶]让Windows FTP服务器更安全
查看>>
CLR via C#,2
查看>>
xcode莫名问题收集
查看>>
Google网址不跳转
查看>>
我所说的“企业存储”是什么意思
查看>>
我的友情链接
查看>>
支付宝 支付bug
查看>>
马斯洛需求理论
查看>>
C++程序设计问题总结
查看>>
404 Error on Fonts in Tomcat/Java Web App
查看>>