【发布时间】:2021-01-04 12:41:51
【问题描述】:
假设我有这个
var array = [1,2,3]
array.forEach {
array.append(17)
print($0)
}
它不会永远循环,而是打印 1、2 和 3,然后数组有 6 个元素:[1,2,3,17,17,17]
这怎么理解?
当我调用.append(17) 时,块内的数组是数组的副本,对吗?然后在循环之后将其分配给数组 var?还是事先做好的副本?
这究竟是怎么回事?
这个:
var array = [1,2,3]
var arrayCopy: [Int]
array.forEach {
arrayCopy.append(17)
print($0)
}
array = arrayCopy
或者这个:
var array = [1,2,3]
var arrayCopy = array
arrayCopy.forEach {
array.append(17)
print($0)
}
还是别的什么?
【问题讨论】:
-
“它不会永远循环”——这是一件非常好的事情。
标签: swift struct foreach copy-on-write