为什么 Slice<T> 的容量总是偶数?

Why do Slice<T>s always have an even capacity?

我目前在项目中使用 Slice 类型。
我注意到一些奇怪的行为,所以我决定仔细看看 Slices。在测试时我发现 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 时,slicecapacity 仍然总是四舍五入到下一个偶数。这是为什么?

更新#1:

现在第一个问题已经被@MartinR 解决了。不过,我问这个问题的最初原因如下。
让我们添加这段代码:

for index in range.startIndex..<range.endIndex {
    slice[index - range.startIndex] = index
}

我认为它会做的是用 range 的值填充 slice。它没有,实际上是这样说的:fatal error: Slice index out of range.
但是,当我检查索引时,例如 here,它们很好。
为什么会这样?

增加容量只分配内存,不会增加slice的endIndex

您仍然需要追加 个新元素:

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

相同
 slice += range

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

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