美文网首页
Swift中的迭代器

Swift中的迭代器

作者: Z_JaDe | 来源:发表于2019-01-25 12:11 被阅读10次

Swift中结构体如果定义成常量,原则上来说是不可变的,同一个方法无论调用多少遍计算出来的结果都是一样的。

然而Swift有些结构体初始化的时候需要传入一个闭包,做一些事情,这就为常量结构体不可变带来一些隐患。

比如有一个迭代器AnyIterator初始化的时候闭包引入一个变量value,每次迭代时变量返回并+1。

因为AnyIterator引用了外部变量,无论这个AnyIterator被copy多少份他们都共同通过闭包拥有这个value变量地址。

实际项目使用的时候创建了一个函数返回了一个迭代器,多次使用之后出了bug,本来很高兴以为发现了swift的bug。

后来仔细一想发现是自己使用错了,其实我应该返回的是一个序列,而不是一个迭代器,通过AnySequence创建AnyIterator,把AnyIterator引用的value变量放在AnySequence闭包内。

总结: Swift中单纯使用结构体的确能保证代码的安全性,但是一旦结构体和类或者闭包结合,也是很容易出问题的,需要注意。

只有迭代器时 通过序列持有迭代器

相关文章

  • Swift中的迭代器

    Swift中结构体如果定义成常量,原则上来说是不可变的,同一个方法无论调用多少遍计算出来的结果都是一样的。 然而S...

  • Python 中的迭代器

    Python 中的迭代器 Python 3中的迭代器 容器与迭代器 在Python 3中,支持迭代器的容器,只要支...

  • Swift学习:构造器(中)

    Swift之构造器(上)Swift之构造器(中)Swift之构造器(下) 本篇继续对Swift中的构造器进行介绍,...

  • 10.迭代器与生成器

    一、迭代器 1). 迭代器概述 类比Java中的迭代器,参考迭代器模式https://www.jianshu.co...

  • 设计模式 | 迭代器模式及典型应用

    本文的主要内容: 介绍迭代器模式 源码分析迭代器模式的典型应用Java集合中的迭代器模式Mybatis中的迭代器模...

  • #8 swift 枚举类型

    极客swift 这个没有将迭代功能 swift V4.2 官方 swift中的枚举( Enumerations )...

  • Swift学习:构造器(下)

    Swift之构造器(上)Swift之构造器(中)Swift之构造器(下) 本篇主要介绍Swift中构造器的一些特殊...

  • 第7章迭代器模式

    第7章迭代器模式 7.1 jQuery中的迭代器 7.2 实现自己的迭代器 7.3 内部迭代和外部迭代 1内部迭代...

  • python迭代器、生成器和生成式

    迭代器 1.什么是迭代器(iter) 迭代器是python中的容器类的数据类型,可以同时存储多个数据。取迭代器中的...

  • c++string & vector &迭代器

    迭代器 迭代器:提供一种对对象的间接访问,就迭代器而言,其对象是容器中的元素或者string中的字符。 获取迭代器...

网友评论

      本文标题:Swift中的迭代器

      本文链接:https://www.haomeiwen.com/subject/bysmjqtx.html