【发布时间】:2020-07-06 08:24:11
【问题描述】:
我在 Matt Neuburg 的 iOS 13 Programming Fundamentals with Swift 中遇到过如下陈述:
当您使用 for...in 循环浏览一个序列时,您实际上循环浏览的是该序列的副本。这意味着在循环过程中改变序列是安全的:
作者为上述陈述提供了以下示例:
var s : Set = [1,2,3,4,5]
for i in s {
if i.isMultiple(of:2) {
s.remove(i)
}
} // s is now [1,3,5]
在上面的示例中,我们可以看到原始数组从 [1,2,3,4,5,6] 更改为 [1,3,5]。这意味着数组本身已更改。所以,for in 循环不是循环通过原始数组的副本,而是数组本身。这似乎与作者上面的陈述相矛盾。
所以,我不确定作者的陈述是否属实。有人请澄清这个问题吗?非常感谢。
【问题讨论】:
-
如果在您开始删除元素时它没有循环通过副本,则整个循环会出错并导致应用程序崩溃。例如,您可以检查
Objective C中会发生什么。 -
当然
s.remove(i)会从集合s中删除元素...
标签: arrays swift loops for-in-loop