如何删除Swift数组中的所有nil元素?

基本方式不起作用。

for index in 0 ..< list.count { if list[index] == nil { list.removeAtIndex(index) //this will cause array index out of range } } 

使用filter来过滤nil元素:

 list = list.filter { $0 != nil } 

您的代码的问题是, 0 ..< list.count在循环开始时执行一次,当list仍然具有其所有元素。 每次删除一个元素时, list.count递减,但迭代范围不被修改。 你最后读得太多了。

编辑删除了C风格的循环,因为它是不正确的(由于除了@MartinR之前,删除他的评论指出,但不正确的原因)。

编辑2现在Swift有flatMap , Marcel Molina的答案是更好的。

在Swift 2.0中,你可以使用flatMap:

 list.flatMap { $0 }