如何删除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 }