在Swift中,什么是“进展”?

时间:2015-02-25 05:18:51

标签: swift iteration control-flow

根据 Swift语言指南中的Control Flow部分,

  

for-in循环为范围,序列,集合或进展中的每个项目执行一组语句。

我很确定我知道其中有三个是什么:

  1. 范围:使用range operators.....<
  2. 定义的内容
  3. 序列:符合SequenceType协议的内容(文档不是明显的,但是不同的人都有reverse-engineered
  4. 集合:Swift collection types中的任何一个,即ArrayDictionary
  5. (我注意到#3可能是多余的,因为ArrayDictionary似乎都符合SequenceType。)

    但是什么是“进步”?这是第四件事,还是作家只是罗嗦?


    ETA:我也看到了CollectionType协议,因此解释了#3。

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>
  

返回值序列(startstart + stridestart + stride + stride,... last )其中 last 是进度中的最后一个值小于end

func stride<T : Strideable>(from start: T, through end: T, by stride: T.Stride) -> StrideThrough<T>
  

返回值序列(startstart + stridestart + 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 ProgressionGeometric Progression

来自Wiki:Arithmetic Progression

  

在数学中,算术级数(AP)或算术序列   是一个数字序列,使得之间的差异   连续的术语是不变的。例如,序列5,7,9,11,   13,15 ......是一个算术级数,常见差为2。

Geometric progression

  

在数学中,几何级数,也称为几何级数   序列,是一系列数字,其中每个术语在第一个之后   通过将前一个乘以一个固定的非零数字得到   称为共同比率。例如,序列2,6,18,54 ......   是一个具有共同比率3的几何级数。同样是10,5,2.5,   1.25,...是一个公共比率为1/2的几何序列。