内容简介:Swift摒弃了C语言式定义变量、累加变量的for-loop,用那什么是通过上面的代码我们可以看出,在
Swift摒弃了 C语言 式定义变量、累加变量的for-loop,用 for-in
取而代之,来遍历集合类型。
那什么是 forEach(_:)
呢? forEach(_:)
也是一种遍历方式。虽然都是遍历方式,但是两者还是有些许的不同的。下面让我们来全面了解一下两者。
应用场景
for-in
- 不需要使用索引,只是单纯的遍历集合
let strs = ["first", "second", "third"] for str in strs { print(str) } //first second third 复制代码
- 需要使用索引
for (index, str) in strs.enumerated() { print(index, str) } // 0 first // 1 second // 2 third 复制代码
forEach(_:)
- 函数式编程
var arr = ["1", "2", "3"] arr.map {Int($0)!}.forEach { (num) in print(num) } // 1 2 3 //假如不使用forEach let map = arr.map {Int($0)!} for num in map { print(num) } 复制代码
- 遍历optional的集合类型
// 如果使用for-in强制解包的话会crash var optionalStrs:[String]? = nil for str in optionalStrs! { print(str) } //使用forEach比较便捷,不会crash var optionalStrs:[String]? = nil optionalStrs?.forEach({ (str) in print(str) }) 复制代码
区别
-
在
forEach(_:)
是不能使用break
和continue
来退出当前循环的。 -
在使用
return
语句的时候,只是退出当前闭包,并不会影响外部的代码块,也不会影响后面循环的调用。
func foreachTextFunc() { let strs = ["first", "second", "third"] strs.forEach { (str) in print(str) return; print("foreach body") } print("end") } foreachTextFunc() //first //second //third //end 复制代码
通过上面的代码我们可以看出,在 forEach(_:)
添加了 return;
之后,它仅仅跳过执行 print("foreach body")
,后面的循环调用和最后的 print("end")
语句都没有被跳过。
Note
如果将上面的 return;
写成 return
,它还是会执行 print("foreach body")
,具体原因请点击这里
总结
- 两者的执行顺序是一致的,执行性能没有差别。
-
当需要使用
break
、continue
、return
等控制语句的时候使用for-in
。 -
当遍历optional数组的时候,使用
forEach(_:)
更加安全方便。 -
当使用函数式编程的时候,使用
forEach(_:)
。
OK,到这里关于 forEach(_:)
和 for-in
就介绍完了,相信大家都对两者的区别和使用场景都有了清晰地认识。接下来大家可以在项目里尽情的使用它们啦,Enjoy It。
Plus: 如果大家觉得本文对大家有一丝帮助,希望大家点个:+1:。 如果有任何问题可以在评论区留言 复制代码
参考
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编程人生(上卷)
[美] Peter Seibel / 图灵社区 / 人民邮电出版社 / 2014-12 / 39.00元
这是一本访谈笔录,记录了当今最具个人魅力的15 位软件先驱的编程生涯。包括Donald Knuth、Jamie Zawinski、Joshua Bloch、Ken Thompson等在内的业界传奇人物,为我们讲述了他们是怎么学习编程的,在编程过程中发现了什么以及他们对未来的看法,并对诸如应该如何设计软件等长久以来一直困扰很多程序员的问题谈了自己的观点。中文版分为上下卷,上卷介绍8位大师。一起来看看 《编程人生(上卷)》 这本书的介绍吧!