为什么Slice <t>总是具有均匀的容量?</t>

时间:2015-02-27 14:51:20

标签: swift slice capacity

我目前正在项目中使用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}}仍然会一直向上舍入到下一个偶数。那是为什么?

更新#1:

现在第一个问题是由@MartinR解决的。我问这个问题的最初原因如下 让我们添加这段代码:

slice

我认为它会做的是用for index in range.startIndex..<range.endIndex { slice[index - range.startIndex] = index } 填充slice。但事实并非如此,实际上是这样说的:range 当我检查指数时,如here,它们没问题 为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

增加容量只会分配内部内存,但不会增加切片的endIndex

您仍然必须追加新元素:

for index in range.startIndex..<range.endIndex {
    slice.append(index)
}

相同
 slice += range

或者您可以用新的切片替换空切片,例如

slice.replaceRange(0 ..< 0, with: range)