Ios 循环数组并使其为空。为什么它的行为如此古怪?
为什么在使数组为空后循环仍执行3次 下面是来自我的游乐场的代码片段Ios 循环数组并使其为空。为什么它的行为如此古怪?,ios,swift,algorithm,Ios,Swift,Algorithm,为什么在使数组为空后循环仍执行3次 下面是来自我的游乐场的代码片段 var arr = [12, 34, 45] for _ in arr { arr = [] print("A") } 结果: A A A 用于在循环中迭代序列,例如数组中的项、数字范围或字符串中的字符。一旦你给循环一个范围,它就会用for循环重复代码,使你的代码更具表现力和优雅 在您的例子中,您说过for循环必须按照数组项重复代码。For循环将重复代码3次 有关更多详细信息,您可以参考这些链接 我希望这
var arr = [12, 34, 45]
for _ in arr {
arr = []
print("A")
}
结果:
A
A
A
用于在循环中迭代序列,例如数组中的项、数字范围或字符串中的字符。一旦你给循环一个范围,它就会用for循环重复代码,使你的代码更具表现力和优雅 在您的例子中,您说过for循环必须按照数组项重复代码。For循环将重复代码3次 有关更多详细信息,您可以参考这些链接
我希望这会对你有所帮助。谢谢。您正在这里迭代一个副本。用于in循环的
旨在为您提供值类型的副本。TL;DR
数组的副本由for-in循环创建(在幕后,for-in循环使用迭代器)
当使用for循环时,Swift正在创建一个迭代器来循环所有元素
让动物=[“羚羊”、“蝴蝶”、“骆驼”、“海豚”]
动物中的动物{
印刷品(动物)
}
与
var animalIterator=animals.makeIterator()
而let animal=animalIterator.next(){
印刷品(动物)
}
(见附件)
因此,行为取决于数组迭代器的工作方式。如果我们看一下数组
上的makeIterator()
方法,它返回一个索引迭代器)在这种for
循环中,在进入循环并等待其next()
为nil之前,在数组的值上创建一个迭代器。您可以在arr{arr=[];print(x)}中使用此代码为x检查它
您没有使数组为空;您正在创建一个新的空数组,并将其引用分配给变量arr
。循环中使用的迭代器仍然保留对原始数组的引用。Int和array是值类型,因此它们总是按值传递(复制)。数组在Swift中是值类型