什么时候使用forEach(_ :)代替for in?
如数组和字典
forEach(_:)
实例方法中所述:
以与for-in循环相同的顺序在 中的每个元素上调用给定的闭包。
尽管如此,改编自序列概述:
序列是您可以一次浏览一个值的列表。遍历序列元素 的最常见方法 是使用 。
forEach(_:)
或表示该迭代序列for in
:
let closedRange = 1...3for 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
。实际上,如果您查看源代码,该forEach
函数实际上只是执行for
-
in
。对于发行版,此功能相对于简单使用的性能开销for
- in
自己并不重要,尽管对于调试版,这会导致明显的性能影响。
的主要优势forEach
时,你正在做的函数式编程实现,你可以把它添加到的功能调用链,而无需事先结果保存到一个单独的变量,如果你使用你需要for
-
in
语法。因此,代替:
let objects = array.map { ... } .filter { ... }
for object in objects {
...
}
您可以改为使用功能性编程模式:
array.map { ... } .filter { ... }
.forEach { ... }
结果是功能代码更简洁,语法噪音更少。
FWIW,Array,Dictionary和Sequence的文档都使我们想起了引入的限制forEach
,即:
您不能使用
break
或continue
语句退出body
关闭的当前调用或跳过后续调用。
return
在body
闭包中使用该语句将仅从当前对的调用退出body
,而不从任何外部范围退出,并且不会跳过后续调用。
以上是 什么时候使用forEach(_ :)代替for in? 的全部内容, 来源链接: utcz.com/qa/404533.html