本文基於Swift5,閱讀時間大約須要10min。
編程
Swift摒棄了C語言式定義變量、累加變量的for-loop,用for-in
取而代之,來遍歷集合類型。swift
那什麼是forEach(_:)
呢?forEach(_:)
也是一種遍歷方式。雖然都是遍歷方式,可是二者仍是有些許的不一樣的。下面讓咱們來全面瞭解一下二者。數組
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
複製代碼
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)
}
複製代碼
// 若是使用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")
語句都沒有被跳過。安全
若是將上面的return;
寫成return
,它仍是會執行print("foreach body")
,具體緣由請點擊這裏bash
break
、continue
、return
等控制語句的時候使用for-in
。forEach(_:)
更加安全方便。forEach(_:)
。OK,到這裏關於forEach(_:)
和for-in
就介紹完了,相信你們都對二者的區別和使用場景都有了清晰地認識。接下來你們能夠在項目裏盡情的使用它們啦,Enjoy It。閉包
Plus:
若是你們以爲本文對你們有一絲幫助,但願你們點個👍。
若是有任何問題能夠在評論區留言
複製代碼