Ios 循环数组并使其为空。为什么它的行为如此古怪?

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次 有关更多详细信息,您可以参考这些链接 我希望这

为什么在使数组为空后循环仍执行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中是值类型