【发布时间】:2018-01-02 03:26:51
【问题描述】:
如Array 和Dictionary forEach(_:) 实例方法中所述:
在序列中的每个元素上调用给定的闭包 order 作为 for-in 循环。
不过,改编自Sequence Overview:
序列是一个值列表,您可以逐个遍历这些值 时间。 迭代序列元素的最常用方法 是使用 for-in 循环。
通过forEach(_:) 或for in 暗示迭代序列:
let closedRange = 1...3
for element in closedRange { print(element) } // 1 2 3
closedRange.forEach { print($0) } // 1 2 3
或(数组):
let array = [1, 2, 3]
for element in array { print(element) } // 1 2 3
array.forEach { print($0) } // 1 2 3
会给出相同的输出。
为什么forEach(_:) 甚至存在?即使用它而不是 for in 循环有什么好处?从性能的角度来看,它们是否相同?
作为一种假设,它可能是一种语法糖,尤其是在使用函数式编程时。
【问题讨论】:
-
从性能角度看,
forEach比for loop慢 m u c h。但它也可以方便地用作Objective-C的makeObjectsPerformSelector : -
@vadian - 在调试版本中它要慢得多。在发布版本中不一定正确(显然取决于代码中的其他内容)。例如,我只是在发布版本中通过包含数百万个对象的数组对迭代进行基准测试,性能差异无法区分。
-
@Rob 感谢您的反馈。事实上,我的“基准测试”是在调试模式下执行的(只需⌘运行项目)
标签: swift loops foreach sequence for-in-loop