我试图用这样的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)
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)
这可确保删除的元素不会更改仍要处理的元素的顺序或索引.
您错过了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)
你的代码应该可以工作,只是超出范围了。
雨燕3
existingArray = []
Run Code Online (Sandbox Code Playgroud)
通过执行此操作,您可以将空数组重新分配给现有数组,并引用数据类型。
或者,您可以使用removeAllit 从数组中删除所有元素并提供保留现有容量的选项。
existingArray.removeAll()
Run Code Online (Sandbox Code Playgroud)
这是一个mutating函数,意味着调用该方法的数组将被更改(空)。
| 归档时间: |
|
| 查看次数: |
73284 次 |
| 最近记录: |