你如何在数组上使用Swift 2.0 popFirst()?

mat*_*att 11 arrays swift2

Swift 2.0 popLast()适用于数组,如下所示:

var arr = [1,2,3]
let i = arr.popLast()
Run Code Online (Sandbox Code Playgroud)

现在arr是[1,2]并且i是3(包含在可选中).

但是虽然也有popFirst(),但它没有编译.我很确定它已经习惯了,但现在还没有:

var arr = [1,2,3]
let i = arr.popFirst() // compile error
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?这种方法何时实际可用?

mat*_*att 19

奇怪的是,popFirst仅适用于切片等数组衍生产品.因此,例如,这编译:

let arr = [1,2,3]
var arrslice = arr[arr.indices]
let i = arrslice.popFirst()
Run Code Online (Sandbox Code Playgroud)

现在arrslice是[2,3](作为切片),i是1(包裹在一个可选中),并且arr不受影响.

这就是如何使用它.

但我不明白为什么这个奇怪的限制强加于使用popFirst().我看到它是如何强加的(在Swift标题中)但我不明白为什么.

编辑思考它,我猜它与效率有关.当你调用popFirst()一个切片时,你得到的是稀疏数组:现在没有索引0.所以我们不必将所有元素向下滑动一个插槽; 相反,我们只是递增了startIndex.