Swift 3.0 for循环语法
由于最近几年我的大部分代码都是使用Swift编写的,因此我一直在调整以使其更具表现力的for循环语法。 现在,用分号语法表示的旧“经典”将不再在Swift中得到支持,我在学习所有新选项时投入了真正的力量!
如果您已经编程了一段时间,无论您是从K&R C(像我一样!),甚至从C ++或Java入手,您可能已经习惯了以下基于C的for循环语法:
for (int i=0; i<10; i++) { printf("%d", i); } // printf() is called 10 times
因此,作为我的参考(以及您的参考,如果您愿意),以下是我需要死记硬背的事情:
循环的旧时光(K&R C — ish)
for i in stride(from: 0, to: 10, by: 1) { print("\(i)") } // print() is called 10 times
好的,这是使用stride
函数,在搜索for循环语法时我看不到很多。 但我实际上有点喜欢。 是的,这有点冗长。 但这确实告诉您发生了什么,不是吗?
在经典C语法中,最常用的增量表达式是i++
,表示“增量1”。 但是有时您想将数字提前1个离散数字,例如:
for (int i=0; i<10; i += 2) { printf("%d", i); } // printf() called 5 times
快速地,这可以通过以下方式交换to:
through:
for i in stride(from: 1, through: 10, by: 2) { print(i) } // print() is called 5 times
换句法
好的,我很喜欢大步前进。 但是像大多数人一样,我更频繁地使用更简洁的For-In语法。 而且与旧的“舒适的牛仔裤” K&R C分号语法不同,它更短并且更具表达意义:
for i in 0..<10 { print("\(i)") } // print() is called 10 times
您必须承认,打字比K&R C少很多,是吗?
通过仅将<
交换为,此语法还可以处理包含循环(也运行在结束号上) .
:
for i in 0...10 { print("\(i)") } // print() is called 11 times
我个人觉得...
有点奇怪,但是我已经习惯了。 用英语语法,它应该是..
,这是一个包含所有内容的列表,但是如果该语法正确,那么在使用..<
时会引起很多错误,但是有人忘了在最后键入<
。 因此,这似乎是实际需要。
遍历数组
我发现我使用这种for循环迭代最常做的事情是遍历数组。 自从过去的C语言以来,这就是事实,而Swift也是如此。 顺便说一句,Swift语言提供了仅针对该senario的语法:
let intArray = [1, 3, 5, 6, 7, 333, 33_223] for i in intArray { print("\(i)") } // print() is called 7 times
这适用于任何类型的数组,并且只是遍历数组的一种好方法。