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

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

当前回答

斯威夫特5. x:

Let list = [0,1,2,3,4,5]

list.enumerated().forEach { (index, value) in
    print("index: \(index), value: \(value)")
}

Or,

list.enumerated().forEach { 
    print("index: \($0.offset), value: \($0.element)")
} 

Or,

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

其他回答

使用.enumerate()可以,但它不能提供元素的真实索引;它只为每个连续的元素提供一个以0开始并加1的Int值。这通常是无关紧要的,但是当与ArraySlice类型一起使用时,可能会出现意想不到的行为。取以下代码:

let a = ["a", "b", "c", "d", "e"]
a.indices //=> 0..<5

let aSlice = a[1..<4] //=> ArraySlice with ["b", "c", "d"]
aSlice.indices //=> 1..<4

var test = [Int: String]()
for (index, element) in aSlice.enumerate() {
    test[index] = element
}
test //=> [0: "b", 1: "c", 2: "d"] // indices presented as 0..<3, but they are actually 1..<4
test[0] == aSlice[0] // ERROR: out of bounds

这是一个有点做作的例子,在实践中也不是一个常见的问题,但我仍然认为值得知道这是可能发生的。

这是枚举循环公式:

for (index, value) in shoppingList.enumerate() {
print("Item \(index + 1): \(value)")
}

更多详情请点击这里。

在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)")
}

你可以简单地使用循环枚举来得到你想要的结果:

斯威夫特2:

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

Swift 3和4:

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

或者你可以简单地执行一个for循环来得到相同的结果:

for index in 0..<elements.count {
    let element = elements[index]
    print("\(index): \(element)")
}

希望能有所帮助。

从Swift 3开始,的确如此

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