美文网首页
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中的迭代器

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