在斯威夫特,什么是"进步"?

Dav*_*les 14 iteration control-flow swift

根据Swift语言指南中控制流部分,

所述for-in循环执行一组用于在一个范围,序列,集合,或进展的每个项目的语句.

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

  1. 范围:使用范围运算符定义的内容,.....<
  2. 顺序:符合SequenceType协议的东西(文档不是很明显,但各种人都对它进行了逆向工程)
  3. 集合:Swift 集合类型中的任何一种,即ArrayDictionary

(我注意到#3可能是多余的,ArrayDictionary似乎都符合SequenceType.)

但是什么是"进展"?这是第四件事,还是作家只是罗嗦?


ETA:我也看到了一个CollectionType协议,所以解释了#3.

Ian*_*Ian 7

除了for-in文档之外,我首先提到的"进展"是在swift框架的注释中定义了stride方法.

func stride<T : Strideable>(from start: T, to end: T, by stride: T.Stride) -> StrideTo<T>
Run Code Online (Sandbox Code Playgroud)

返回值的序列(start,start + stride,start + stride + stride,... 最后),其中最后一个是在小于进展的最后一个值end.

func stride<T : Strideable>(from start: T, through end: T, by stride: T.Stride) -> StrideThrough<T>
Run Code Online (Sandbox Code Playgroud)

返回值的序列(start,start + stride,start + stride + stride,... 最后),其中最后是在进展小于或等于最后值end.注意::不保证end是序列的元素.

简而言之,"进展"指的是Strideable类似于"集合"如何指代CollectionType协议以及符合它的类和结构协议.

数字类型(Int,Double,Float,UnsafePointer,Bit等)倾向于符合此协议,因此它们可以针对for in循环递增/递减.此处Strideable找到的协议的完整继承图.