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 

这适用于任何类型的数组,并且只是遍历数组的一种好方法。