前言:
通常我们对数组进行索引操作会考虑是否越界,通常的处理方法是对Array添加extention,然后做安全扩展。
// MARK: - 数组
extension Array {
//数组安全索引
subscript (safe index: Int) -> Element? {
return (0..<count).contains(index) ? self[index] : nil
}
}
另外如果我们想对数组进行多个索引操作可以这样做:
//多索引操作
subscript(i1: Int, i2: Int, rest: Int...) -> [Element] {
get {
var result: [Element] = [self[i1], self[i2]]
for index in rest {
result.append(self[index])
}
return result
}
set (values) {
for (index, value) in zip([i1, i2] + rest, values) {
self[index] = value
}
}
}
接下来我们讲一下数组切片,这是swift引入的新概念
var testArray = [10,20,30,40,50,60]
var arraySlices = testArray[2...4]
数组切片需要注意的是:
- 1:数组切片的下标与原始数组中的下标保持一致。我们对arraySlices的访问仅限在2..4,
arraySlices[0]
会报错 - 2: 尽管切片与原数组有着对应的数组下标,但是切片是原始数组的部分拷贝,所以修改切片或者修改原数组,两者互不影响
- 3: 切片转换成枚举,那么切片中与原始数组对应的下标关系将不存在。见下面代码
let enumerate = arraySlices.enumerated()
dump(enumerate)
for a in enumerate {
print("a=\(a),a.0=\(a.0),a.1=\(a.1)")
}
网友评论