Mảng có ngữ nghĩa giá trị đầy đủ trong Swift, do đó không cần bất cứ điều gì lạ mắt.
var duplicateArray = originalArray
là tất cả những gì bạn cần.
Nếu nội dung của mảng của bạn là loại tham chiếu, thì có, điều này sẽ chỉ sao chép con trỏ đến đối tượng của bạn. Để thực hiện một bản sao sâu của nội dung, thay vào đó bạn sẽ sử dụng map
và thực hiện một bản sao của từng trường hợp. Đối với các lớp học Foundation mà phù hợp với các giao thức NSCopying
, bạn có thể sử dụng copy()
phương pháp:
let x = [NSMutableArray(), NSMutableArray(), NSMutableArray()]
let y = x
let z = x.map { $0.copy() }
x[0] === y[0] // true
x[0] === z[0] // false
Lưu ý rằng có những cạm bẫy ở đây là ngữ nghĩa giá trị của Swift đang làm việc để bảo vệ bạn khỏi-ví dụ, vì NSArray
đại diện cho một mảng bất biến , phương thức copy
của nó chỉ trả về tham chiếu cho chính nó, do đó, kiểm tra ở trên sẽ mang lại kết quả không mong muốn.
Nguồn
2015-01-07 04:42:02
tại sao bạn không chỉ định giá trị trực tiếp như sau: 'var duplicateArray = originalArray' –
Cảm ơn! Nó đã làm việc! – Patrick