是否有一个函数,我可以使用迭代数组,并有索引和元素,像Python的枚举?

for index, element in enumerate(list):
    ...

当前回答

斯威夫特5. x:

我个人更喜欢使用forEach方法:

list.enumerated().forEach { (index, element) in
    ...
}

你也可以使用简短的版本:

list.enumerated().forEach { print("index: \($0.0), value: \($0.1)") }

其他回答

是的。从Swift 3.0开始,如果需要每个元素的索引及其值,可以使用enumeration()方法遍历数组。它返回一个由索引和数组中每个项的值组成的对序列。例如:

for (index, element) in list.enumerated() {
  print("Item \(index): \(element)")
}

在Swift 3.0之前和Swift 2.0之后,函数被称为enumerate():

for (index, element) in list.enumerate() {
    print("Item \(index): \(element)")
}

在Swift 2.0之前,enumerate是一个全局函数。

for (index, element) in enumerate(list) {
    println("Item \(index): \(element)")
}

在iOS 8.0/Swift 4.0+

你可以使用forEach 根据苹果文档:

返回一个对序列(n, x),其中n表示从0开始的连续整数,x表示序列中的一个元素。

let numberWords = ["one", "two", "three"]

numberWords.enumerated().forEach { (key, value) in
   print("Key: \(key) - Value: \(value)")
}

对于那些想使用forEach的人。

斯威夫特4

extension Array {
  func forEachWithIndex(_ body: (Int, Element) throws -> Void) rethrows {
    try zip((startIndex ..< endIndex), self).forEach(body)
  }
}

Or

array.enumerated().forEach { ... }

我在寻找一种使用Dictionary的方法时找到了这个答案,结果证明它很容易适应,只需为元素传递一个元组。

// Swift 2

var list = ["a": 1, "b": 2]

for (index, (letter, value)) in list.enumerate() {
    print("Item \(index): \(letter) \(value)")
}

如果你出于某种原因想要一个更传统的查找循环,通过索引访问数组中的元素:

let xs = ["A", "B", "C", "D"]

for i in 0 ..< xs.count {
    print("\(i) - \(xs[i])")
}

输出:

0 - A
1 - B
2 - C
3 - D