根据 Swift语言指南中的Control Flow部分,
for-in
循环为范围,序列,集合或进展中的每个项目执行一组语句。
我很确定我知道其中有三个是什么:
...
或..<
SequenceType
协议的内容(文档不是明显的,但是不同的人都有reverse-engineered)Array
和Dictionary
(我注意到#3可能是多余的,因为Array
和Dictionary
似乎都符合SequenceType
。)
但是什么是“进步”?这是第四件事,还是作家只是罗嗦?
ETA:我也看到了CollectionType
协议,因此解释了#3。
答案 0 :(得分:7)
我第一次提到&#34;进展&#34;除了for-in文档之外,还有swift框架的注释,其中定义了stride方法。
func stride<T : Strideable>(from start: T, to end: T, by stride: T.Stride) -> StrideTo<T>
返回值序列(
start
,start + stride
,start + stride + stride
,... last )其中 last 是进度中的最后一个值小于end
。
func stride<T : Strideable>(from start: T, through end: T, by stride: T.Stride) -> StrideThrough<T>
返回值序列(
start
,start + stride
,start + stride + stride
,... last )其中 last 是进度中的最后一个值小于或等于end
。注意::不保证end
是序列的元素。
简而言之,&#34;进展&#34;是指Strideable
协议类似于&#34;集合&#34;是指CollectionType
协议以及符合它的类和结构。
数字类型(Int,Double,Float,UnsafePointer,Bit等)倾向于符合此协议,因此它们可以针对for in
循环递增/递减。 Strideable
协议的完整继承图找到了here。
答案 1 :(得分:4)
你可能正在寻找的是这种循环(大步前进)
for i in stride(from: 1, to: 10, by: 2) {
println(i)
}
这是
的新语法替代品for var i = 1; i < 10; i += 2 {
println(i)
}
答案 2 :(得分:2)
这个问题的答案在于数学。
数学有两种类型的进展。
Arithmetic Progression和Geometric Progression
来自Wiki:Arithmetic Progression
在数学中,算术级数(AP)或算术序列 是一个数字序列,使得之间的差异 连续的术语是不变的。例如,序列5,7,9,11, 13,15 ......是一个算术级数,常见差为2。
在数学中,几何级数,也称为几何级数 序列,是一系列数字,其中每个术语在第一个之后 通过将前一个乘以一个固定的非零数字得到 称为共同比率。例如,序列2,6,18,54 ...... 是一个具有共同比率3的几何级数。同样是10,5,2.5, 1.25,...是一个公共比率为1/2的几何序列。