Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在数组上使用Swift 2.0 popFirst()?_Arrays_Swift2 - Fatal编程技术网

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

Arrays 如何在数组上使用Swift 2.0 popFirst()?,arrays,swift2,Arrays,Swift2,Swift 2.0popLast()在数组上工作,如下所示: var arr = [1,2,3] let i = arr.popLast() 现在,arr是[1,2],而i是3(包装在可选文件中) 但是,尽管还有一个popFirst(),但它不会编译。我很确定以前是这样,但现在不是了: var arr = [1,2,3] let i = arr.popFirst() // compile error 这是怎么回事?这种方法什么时候实际可用?奇怪的是,popFirst仅适用于切片等数组派生。因

Swift 2.0
popLast()
在数组上工作,如下所示:

var arr = [1,2,3]
let i = arr.popLast()
现在,
arr
是[1,2],而
i
是3(包装在可选文件中)

但是,尽管还有一个
popFirst()
,但它不会编译。我很确定以前是这样,但现在不是了:

var arr = [1,2,3]
let i = arr.popFirst() // compile error

这是怎么回事?这种方法什么时候实际可用?

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

let arr = [1,2,3]
var arrslice = arr[arr.indices]
let i = arrslice.popFirst()
现在
arrsicle
是[2,3](作为一个片),
i
是1(包装在一个可选文件中),并且
arr
是未触及的

这就是如何使用它

但是我不明白为什么要对
popFirst()
的使用施加这种奇怪的限制。我看到它是如何强加的(在Swift标题中),但我不明白为什么


编辑再想一想,我猜这与效率有关。在切片上调用
popFirst()
时,将得到一个稀疏数组:现在没有索引0。因此,我们不必将所有元素滑下一个插槽;相反,我们只是简单地增加了
startIndex

感谢您解释这个谜团!我想,您只需要使用removeFirst,但您必须用removeFirst检查数组是否为空。