Swift的for-in循环如何工作?

时间:2014-06-27 06:39:30

标签: swift

使用Java的Stream API,可以使用 功能 internal iteration而非,就像

一样
collection.forEach(out::println)

Swift是否遵循for-each循环结构......

for i in names {
    println(i)
}

...仅仅是内部(功能)迭代的语法糖,也可以被解释为循环的以下命令?

for var i = 0; i < names.count; i++ {
    println(names[i])
}

1 个答案:

答案 0 :(得分:6)

language reference表示对于for - in循环,

  

在集合表达式上调用generate()方法以获取生成器类型的值 - 即符合Generator协议的类型。程序通过调用流上的next()方法开始执行循环。如果返回的值不是None,则将其分配给模式,程序执行语句,然后在循环开始时继续执行。否则,程序不执行赋值或执行语句,并且已完成执行for - in语句。

所以,我们可以说

for i in names {
    println(i)
}

大致相当于

var g = names.generate()  // "var" because next() is a mutating function
while let i = g.next() {  // "let" pattern because next() returns an optional
    println(i)
}

至于功能迭代,我们有SequenceType的func map<T>(_ transform: (Element) -> T) -> [T]