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

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

内容简介: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:。
如果有任何问题可以在评论区留言
复制代码

参考


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

查看所有标签

猜你喜欢:

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

Chinese Authoritarianism in the Information Age

Chinese Authoritarianism in the Information Age

Routledge / 2018-2-13 / GBP 115.00

This book examines information and public opinion control by the authoritarian state in response to popular access to information and upgraded political communication channels among the citizens in co......一起来看看 《Chinese Authoritarianism in the Information Age》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具