Swift操场或控制台应用程序中的以下代码:
let letters = ["A", "B", "C"] letters.filter({ (x : String) -> Bool in println("PRINT: \(x)") return true })
打印出来:
PRINT: A PRINT: B PRINT: C PRINT: A PRINT: B PRINT: C
为什么它会两次迭代集合?
最有可能filter
实现的是首先计算它需要存储的元素数量,然后在使用该数字来调整新数组的存储分配大小后,再次循环以复制他需要保留的元素.
如果总是返回它只循环一次的事实false
意味着如果结果为空则它会优化第二个循环.
您可能希望将此视为一个错误,但它可能"按设计工作":毕竟数组不是列表.
它在beta 5中进行了修改.它现在只运行一次,ABC
而不是打印ABCABC