Mic*_*May 0 arrays loops for-in-loop swift
我在 Matt Neuburg 的《iOS 13 Swift 编程基础》中看到了如下的陈述:
\n\n\n当您使用 for...in 循环访问序列时,您实际循环访问的是该序列的副本。这意味着当你循环遍历序列时,改变序列是安全的:
\n
作者为上述陈述提供了以下示例:
\nvar s : Set = [1,2,3,4,5]\nfor i in s {\n if i.isMultiple(of:2) {\n s.remove(i)\n }\n} // s is now [1,3,5]\nRun Code Online (Sandbox Code Playgroud)\n在上面的示例中,我们可以看到原始数组从 [1,2,3,4,5,6] 更改为 [1,3,5]。这意味着数组本身已更改。因此,for in循环不是循环原始数组的副本,而是循环数组本身。这似乎与作者上述的说法相矛盾。
所以,我不确定作者的说法是否属实。有人可以澄清一下这个问题吗?非常感谢。
\n乍一看,措辞可能有点误导,但for i in s循环遍历原始副本的陈述s是正确的。如果不是这样,您将得到越界异常或意外结果(集合的某些元素被跳过),因为您在迭代集合时会改变集合。
当您使用 创建循环时for i in s,将创建 的副本s,并通过该副本进行迭代。但是,当您访问s循环体内部时,您正在访问原始内容s并因此对其进行更改,而不是更改循环正在迭代的副本。
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |