Swift:删除所有数组元素

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

for index 1...myArray.count { myArray.removeAtIndex(index) } 

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

预期';' 在'for'语句中

9 Solutions collect form web for “Swift:删除所有数组元素”

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

 myArray.removeAll() 

理所当然,@ vadian的答案是解决scheme ,我只想指出你的代码是行不通的。

首先,数组索引是基于0的,所以你应该相应地重写范围:

 for index 0..<myArray.count { myArray.removeAtIndex(index) } 

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

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

在下一次迭代中,索引为1的元素被删除,最后一个元素在索引7下移。依此类推。

在循环中的某一点,尝试删除一个不存在索引的元素将导致应用程序崩溃。

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

 for index in reverse(0..<myArray.count) { myArray.removeAtIndex(index) } 

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

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

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

 for index in 1...myArray.count { myArray.removeAtIndex(index) } 

然而,这将不会像你所期望的那样有几个原因:

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

如果你试图从数组中删除所有的东西,那么你应该按照其他人的build议和使用:

 myArray.removeAll() 

如果你只想要第一个元素而没有别的东西你可以得到第一个对象的引用,清空数组,然后重新添加对象:

 var firstElement = myArray.first! myArray.removeAll() myArray.append(firstElement) 

凯尔在正确的轨道上,但他的代码将失败,因为可能的指数在枚举期间减less,导致非法指数。

解决这个问题的一个方法是向后列举。 在迅速这是通过使用大步完成。

 for index in stride(from: myArray.count - 1, through: 0, by: -1) { myArray.removeAtIndex(index) } 

另一个select是使用filter()

Swift 1.2

 myArray = filter(myArray, { (obj) -> Bool in return false }) 

Swift 2

 myArray = myArray.filter{ (obj) -> Bool in return false } 

Swift 2中有removeAllObjects()方法

 Syntax : public func removeAllObjects() Eg.: mainArray.removeAllObjects 

要删除特定索引处的元素,请使用:

 Syntax : public func removeObjectAtIndex(index: Int) Eg.: mainArray.removeObjectAtIndex(5) 

删除最后一个元素的用法:

 Syntax : public func removeLastObject() Eg.: mainArray.removeLastObject() 

要移除特定范围内的元素,请使用:

 Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange) 

要删除特定的元素使用:

 Syntax : public func removeObject(anObject: AnyObject) 

下面的屏幕截图显示了NSMutableArray扩展中可用的方法列表

截图1

你的代码应该可以工作,它只是出了界限。

Swift 3

 existingArray = [] 

通过这样做,可以将空数组重新分配给现有的数组,并引用数据types。

或者,您可以使用removeAll删除arrays中的所有元素,并提供一个选项来保留现有的容量。

 existingArray.removeAll() 

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

你也可以这样做:

 for _ in myArray { myArray.removeAtIndex(0) } 

Vadian在你想要完成的事情上有正确的答案。 由于您的代码示例而显示的问题是由于您尝试创buildfor循环的方式所致。 Index默认从0开始。 在不是创buildfor循环的正确方法之后添加数字范围。 这就是为什么你看到这个错误。 相反,创build你的for循环如下:

 for index in myArray.count { // Do stuff } 

希望这个答案能够帮助那些对Swift或编程不熟悉的人。

  • 尝试在iOS中处理“返回”导航button操作
  • 我怎样才能安全地删除我的〜/ Library / Developer / Xcode / DerivedData目录?
  • 比较date
  • 在UICollectionView上调用reloadData之后,contentSize不会更新
  • 这个证书有一个无效的发行者:钥匙串标记所有的证书为“无效的发行者”
  • 如何将文本添加到iOS Swift中的图像
  • 如何在Swift中使用AVPlayerViewController(AVKit)播放video
  • 如何在UIWebView中caching内容以便稍后加载?
  • “这个UIView似乎是一个NSISVariable的代表,它不知道任何关于。 这是一个内部UIKit错误“错误
  • 如何提高自定义OpenGL ES 2.0深度纹理生成的性能?
  • iOS 8旋转方法弃用 - 向后兼容性