在 Swift 中,indices 是 Collection(如数组、字符串等)类型的一个属性,用来表示集合中所有有效索引的范围。
indices 的定义和作用
对于一个数组 piggyBank,piggyBank.indices 是一个 Range 或 ClosedRange,它表示数组中所有有效索引的范围。例如:
let piggyBank = ["A", "B", "C"]
// piggyBank.indices 是 0..<3
for index in piggyBank.indices {
print(index)
}
输出:
0
1
2
在这个例子中:
piggyBank.indices 等价于 0..<piggyBank.count,表示数组的所有有效索引范围。
遍历 piggyBank.indices 会遍历数组的所有有效索引。
为什么使用 indices 而不是手写索引?
1、安全性:
indices 保证只返回有效的索引,避免手动写索引范围(如 0..<array.count)时可能出现的错误。
2、可读性:
使用 indices 更直观地表达「遍历集合的所有索引」。
3、泛用性:
indices 适用于所有 Collection 类型,包括数组、字典、集合等,而不仅仅是数组。
在 ForEach 中的使用
ForEach 是 SwiftUI 中用于动态创建视图的结构。piggyBank.indices 在这里的作用是提供数组的所有有效索引,以便在闭包中通过索引访问数组的元素。
例如:
struct ContentView: View {
let piggyBank = ["Savings", "Vacation", "Emergency"]
var body: some View {
ForEach(piggyBank.indices, id: \.self) { index in
Text("\(index): \(piggyBank[index])")
}
}
}
输出:
0: Savings
1: Vacation
2: Emergency
分析:
piggyBank.indices 返回 0..<3,对应数组的所有有效索引。
id: \.self 告诉 ForEach,每个索引值本身是唯一的标识符。
闭包 index in 中可以通过索引 index 访问 piggyBank 的元素。
总结
indices 是 Collection 的一个属性,表示集合的所有有效索引范围。在 ForEach 中使用 piggyBank.indices 是一种安全且简洁的方式来遍历数组的索引,以便通过索引访问数组的元素。