关于Swift中的forEach(_:)和for-in loop

栏目: Swift · 发布时间: 5年前

内容简介: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(_:) 是不能使用 breakcontinue 来退出当前循环的。
  • 在使用 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") ,具体原因请点击这里

总结

  • 两者的执行顺序是一致的,执行性能没有差别。
  • 当需要使用 breakcontinuereturn 等控制语句的时候使用 for-in
  • 当遍历optional数组的时候,使用 forEach(_:) 更加安全方便。
  • 当使用函数式编程的时候,使用 forEach(_:)

OK,到这里关于 forEach(_:)for-in 就介绍完了,相信大家都对两者的区别和使用场景都有了清晰地认识。接下来大家可以在项目里尽情的使用它们啦,Enjoy It。

Plus
如果大家觉得本文对大家有一丝帮助,希望大家点个:+1:。
如果有任何问题可以在评论区留言
复制代码

参考


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入浅出密码学

深入浅出密码学

Christof Paar、Jan Pelzl / 马小婷 / 清华大学出版社 / 2012-9 / 59.00元

密码学的应用范围日益扩大,它不仅用于政府通信和银行系统等传统领域,还用于Web浏览器、电子邮件程序、手机、制造系统、嵌入式软件、智能建筑、汽车甚至人体器官移植等领域。今天的设计人员必须全面系统地了解应用密码学。 《深入浅出密码学——常用加密技术原理与应用》作者帕尔和佩尔茨尔长期执教于计算机科学与工程系,拥有十分丰富的应用密码学教学经验。本书可作为研究生和高年级本科生的教科书,也可供工......一起来看看 《深入浅出密码学》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具