2015-09-30 11 views
9

スイフト2.0 popLast()作品:Swift 2.0 popFirst()をどのようにして配列に使用しますか?このようなアレイ上

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 

はここで何が起こっているの?この方法はいつ実際に使用可能ですか?

答えて

14

奇妙なことに、popFirstは、スライスなどの配列派生語でのみ機能します。したがって、例えば、これはコンパイル:今

let arr = [1,2,3] 
var arrslice = arr[arr.indices] 
let i = arrslice.popFirst() 

arrsliceである[2,3](スライスなど)、i(任意に包まれた)1であり、そしてarrはそのままです。

これは使い方です。

しかし、この奇妙な制限がpopFirst()の使用に課されている理由はわかりません。私はを参照してくださいどのように(Swiftヘッダーで)課されますが、私はなぜ表示されません。

EDITもう少し考えてみると、それは効率と関係していると思います。スライス上でpopFirst()を呼び出すと、まばらな配列になるものが得られます。インデックスは0になりません。すべての要素を1つのスロットにスライドさせる必要はありませんでした。代わりに、単にstartIndexを増やしました。

+0

この謎を説明してくれてありがとう!おそらく** removeFirst **を使用すると思いますが、removeFirstを使用して配列が空であることを厄介にチェックしなければなりません。 – Fattie

関連する問題