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

3

使用Java的流API,可以像使用函数式内部迭代 迭代器一样对集合进行操作。

collection.forEach(out::println)

Swift的for-each循环结构是否有以下问题:...
for i in names {
    println(i)
}

这只是一种内部(函数式)迭代的语法糖,可以用以下命令式for循环来解释:

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

6
语言参考中指出,在 for-in 循环中,会调用集合表达式的 generate() 方法来获取一个生成器类型的值,即符合 Generator 协议的类型。程序通过在流上调用 next() 方法开始执行循环。如果返回的值不是 None,它将被赋值给 item 模式,程序执行相应的语句,然后继续执行循环的开头。否则,程序不进行赋值或执行语句,并且完成执行 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]方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接