我目前正在项目中使用Slice
类型
我注意到一些奇怪的行为,所以我决定仔细看看Slice
s。在测试时我发现了this:
var slice = Slice<Int>()
var range = 1...9
let length = range.endIndex - range.startIndex
println(" length of 'range': \(length)") //prints "length of 'range': 9"
slice.reserveCapacity(length)
println("capacity of 'slice': \(slice.capacity)") //prints "capacity of 'slice': 10"
现在,在更改range
时,capacity
的{{1}}仍然会一直向上舍入到下一个偶数。那是为什么?
现在第一个问题是由@MartinR解决的。我问这个问题的最初原因如下 让我们添加这段代码:
slice
我认为它会做的是用for index in range.startIndex..<range.endIndex {
slice[index - range.startIndex] = index
}
填充slice
。但事实并非如此,实际上是这样说的:range
当我检查指数时,如here,它们没问题
为什么会发生这种情况?
答案 0 :(得分:1)
增加容量只会分配内部内存,但不会增加切片的endIndex
。
您仍然必须追加新元素:
for index in range.startIndex..<range.endIndex {
slice.append(index)
}
与
相同 slice += range
或者您可以用新的切片替换空切片,例如
slice.replaceRange(0 ..< 0, with: range)