Swift:删除所有数组元素

Meh*_*met 97 ios swift

我试图用这样的for循环删除所有数组元素:

for index 1...myArray.count {
   myArray.removeAtIndex(index)
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我在bulding之前得到这个错误:

预期';' 在'for'声明中

vad*_*ian 283

有一种方法(实际上是一个功能)

myArray.removeAll()
Run Code Online (Sandbox Code Playgroud)

  • @NoodleOfDeath严格来说Swift数组是`struct`s,结构有`函数`,不像有`methods`的类. (10认同)

Ant*_*nio 16

理所当然地认为@ vadian的答案是解决方案,我只想指出你的代码不起作用.

首先,数组索引是从0开始的,因此您应该相应地重写范围:

for index 0..<myArray.count {
   myArray.removeAtIndex(index)
}
Run Code Online (Sandbox Code Playgroud)

但是这种实现会导致崩溃.如果您有一个包含10个元素的数组,则最后一个元素占据索引9处的位置.

使用该循环,在第一次迭代时,索引0处的元素被移除,这导致最后一个元素在索引8处向下移位.

在下一次迭代中,索引1处的元素被移除,最后一个元素在索引7处向下移动.依此类推.

在循环中的某个时刻,尝试删除非现有索引的元素将导致应用程序崩溃.

在循环中从数组中删除元素时,最好的方法是以相反的顺序遍历它:

for index in reverse(0..<myArray.count) {
    myArray.removeAtIndex(index)
}
Run Code Online (Sandbox Code Playgroud)

这可确保删除的元素不会更改仍要处理的元素的顺序或索引.

  • @VJ这就是我在答案的第一行写的:) (2认同)

V.J*_*.J. 7

如果你真的想要清除数组,最简单的方法是重新初始化它.


Kyl*_*cot 7

您错过了in导致错误的关键字.代码应该是:

for index in 1...myArray.count {
    myArray.removeAtIndex(index)
}
Run Code Online (Sandbox Code Playgroud)

然而,由于以下几个原因,这将无法正常工作:

  • 最后一个有效索引是count - 1需要的1..<myArray.count
  • 更重要的是,从数组中删除元素会缩短它,从而每次都更改索引.

如果您尝试从阵列中删除所有内容,那么您应该按照其他人的建议并使用:

myArray.removeAll()
Run Code Online (Sandbox Code Playgroud)

如果您只想要第一个元素而没有其他任何东西,您可以获得对第一个对象的引用,清空该数组,然后重新添加该对象:

var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)
Run Code Online (Sandbox Code Playgroud)


Lor*_*lor 5

你的代码应该可以工作,只是超出范围了。

雨燕3

existingArray = []
Run Code Online (Sandbox Code Playgroud)

通过执行此操作,您可以将空数组重新分配给现有数组,并引用数据类型。

或者,您可以使用removeAllit 从数组中删除所有元素并提供保留现有容量的选项。

existingArray.removeAll()
Run Code Online (Sandbox Code Playgroud)

这是一个mutating函数,意味着调用该方法的数组将被更改(空)。