2015-09-30 17 views
9

Swift 2.0 popLast() công trình trên một mảng, như thế này:Làm thế nào để bạn sử dụng Swift 2.0 popFirst() trên một Array?

var arr = [1,2,3] 
let i = arr.popLast() 

Bây giờ arr là [1,2] và i là 3 (bọc trong một Tùy chọn).

Nhưng mặc dù cũng có popFirst(), nó không biên dịch. Tôi khá chắc chắn rằng nó được sử dụng để, nhưng nó không phải bây giờ:

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

Điều gì đang xảy ra ở đây? Khi nào phương pháp này thực sự có thể sử dụng được?

Trả lời

14

Thật kỳ lạ, popFirst chỉ hoạt động trên các dẫn xuất mảng như lát. Vì vậy, ví dụ, điều này biên dịch:

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

Bây giờ arrslice là [2,3] (như một lát), i là 1 (bọc trong một Tùy chọn), và arr là hoang sơ.

Vì vậy, đó là cách sử dụng nó.

Nhưng tôi không hiểu tại sao giới hạn lẻ này được áp dụng đối với việc sử dụng popFirst(). Tôi thấy cách nó được áp đặt (trong tiêu đề Swift) nhưng tôi không thấy lý do.

EDIT Suy nghĩ về nó một số chi tiết, tôi đoán nó có liên quan đến hiệu quả. Khi bạn gọi popFirst() trên một lát, bạn sẽ nhận được số tiền cho một mảng thưa thớt: hiện tại không có chỉ mục 0. Vì vậy, chúng tôi không phải trượt tất cả các phần tử xuống một vị trí; thay vào đó, chúng tôi chỉ đơn giản là tăng số startIndex.

+0

cảm ơn vì đã giải thích bí ẩn này! Tôi đoán, bạn chỉ cần sử dụng ** removeFirst ** - nhưng bạn phải kiểm tra một cách phiền toái mảng đang trống, với removeFirst. – Fattie

Các vấn đề liên quan