注重我,每天同享一个关于 iOS 的新知识

前语

在 swift 开发中,用来循环的方法有许多中,比如最常用的 for 循环、高阶函数 forEachrepeat,尽管这些方法看起来类似,但仍是有差异的。

让我们一一回忆一下它们,看看什么场景更适合运用哪一个。

for 循环

for 循环应该是所有编程言语中最出名的迭代方法,它在 Swift 中也称为 for-in 循环:

  • 比如循环 0 – 3 这个规模:
fornumin0...3{
print(num)
}
//0
//1
//2
//3

如果不需要序列中的每个值,可以经过运用下划线代替变量名称来疏忽这些值:

for_in0...3{
print("iOS新知")
}
//iOS新知
//iOS新知
//iOS新知

0...3 代表 0、1、2、3,还可以运用半开规模运算符 ( ..< ) 包括下限但不包括上限,0..<3 代表 0、1、2

  • 数组运用 for-in 循环:
letnames=["Anna","Alex","Brian","Jack"]
fornameinnames{
print("Hello,\(name)!")
}
//Hello,Anna!
//Hello,Alex!
//Hello,Brian!
//Hello,Jack!
  • 字典也可以直接运用 for-in 循环:
letnumberOfLegs=["spider":8,"ant":6,"cat":4]
for(animalName,legCount)innumberOfLegs{
print("\(animalName)shave\(legCount)legs")
}
//catshave4legs
//antshave6legs
//spidershave8legs

forEach 循环

上面的比如也都可以用在 foreach 循环中。实际上,forEachfor-in 循环以相同的顺序对序列中的每个元素调用给定的闭包:

(0...3).forEach{numin
print(num)
}
//0
//1
//2
//3
letnames=["Anna","Alex","Brian","Jack"]
names.forEach{namein
print("Hello,\(name)!")
}
//Hello,Anna!
//Hello,Alex!
//Hello,Brian!
//Hello,Jack!
letnumberOfLegs=["spider":8,"ant":6,"cat":4]
numberOfLegs.forEach{(animalName,legCount)in
print("\(animalName)shave\(legCount)legs")
}
//catshave4legs
//antshave6legs
//spidershave8legs

for-in 和 forEach 的差异

  1. breakcontinue 两个退出循环的关键字在 forEach 中不可用

  2. 在 forEach 中运用 return 关键字,只会退出其时循环,不会退出外层的函数

关于 forEach 的底层完结可以参阅之前的文章 Foundation 中的高阶函数是怎样完结的

forEach 不同的是,for-in 还可以跟 where 关键字一起运用,比如,在一个数字区间的循环中,我只想打印偶数:

fornumberin0...9wherenumber.isMultiple(of:2){
print(number)
}
//0
//2
//4
//6
//8

While 循环

While 循环虽然不常用,但它的特点非常显着,在指定条件下循环,在某些场景下非常有用。

比如我们有个变量为数字 0,先判别是否小于 3,然后每次循环都 + 1,直到小于 3 停止:

varnumber=0
whilenumber<3{
print(number)
number+=1
}
//0
//1
//2

Repeat while 循环

while 循环的另一种变体 repeat - while 循环,它和 while 循环的首要差异在于,在判别循环条件之前,repeat 循环会先实行一次循环块。然后继续重复循环,直到条件为 false,也就是说 repeat 循环不论条件怎么至少实行一次。

在 oc 言语和其他编程言语中,这个方法叫 do – while 循环

varnumber=0
repeat{
print(number)
number+=1
}while(number<3)
//0
//1
//2

这儿每天同享一个 iOS 的新知识,快来注重我吧

本文同步自微信群众号 “iOS新知”,每天按时同享一个新知识,这儿仅仅同步,想要及时学到就来注重我吧!