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"
}
我正在尝试找出以下内容之间的区别:
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"
}