Swift 3 - 区分"for loops"

Swift 3 - distinguishing between "for loops"

我正在尝试找出以下内容之间的区别:

for i in A {

for i in 0..<A.count {

他们不都只是遍历数组吗?

Swift 只有一个 for 循环,这与其他一些语言不同。 Swift 的 for 循环遍历 Sequence 并提供(在循环变量中,在您的情况下为 i)该序列的每个元素。

在你的第一个例子中,序列是A,数组本身,这意味着i是数组的一个元素:

var A = [ "Mal", "Wash", "Kaylee" ]
for i in A {
    print(i) // prints "Mal" on the first pass, then "Wash", then "Kaylee"
}

在您的第二个示例中,序列是一个 Range 整数,从零开始到比数组大小小一结束。所以i是一个整数:

for i in 0..<A.count {
    print(i) // prints "0", then "1", then "2"
}

如果您使用第二种样式并且需要数组元素,则需要在循环体中显式地从数组中获取它:

for i in 0..<A.count {
    print(A[i]) // prints "Mal", then "Wash", then "Kaylee"
}

这对于您至少对索引和内容同样关心的情况很有用:

for i in 0..<A.count {
    if A[i] == "Wash" {
        A.insert("Zoe", at: i + 1)
    }
}

虽然,如果您需要序列中的元素和索引,首选的 Swift 样式是使用 enumerated() 代替 — 这提供了一个元组序列,为您提供:

for (index, element) in A.enumerated() {
    print(index, element) // prints "0 Mal", "1 Wash", "2 Kaylee"
}