Làm cách nào để khởi tạo một mảng nhanh chóng với một dung lượng cụ thể?Swift init Array với công suất
Tôi đã thử:
var grid = Array <Square>()
grid.reserveCapacity(16)
nhưng nhận được lỗi
expected declaration
Làm cách nào để khởi tạo một mảng nhanh chóng với một dung lượng cụ thể?Swift init Array với công suất
Tôi đã thử:
var grid = Array <Square>()
grid.reserveCapacity(16)
nhưng nhận được lỗi
expected declaration
Làm thế nào về:
class Square {
}
var grid = Array<Square>(count: 16, repeatedValue: Square());
Mặc dù điều này sẽ gọi các nhà xây dựng cho mỗi vuông.
Nếu bạn đã thực hiện mảng có trường Quảng trường tùy chọn bạn có thể sử dụng:
var grid2 = Array<Square?>(count: 16, repeatedValue: nil);
EDIT: Với Swift3 chữ ký khởi tạo này đã thay đổi đến sau:
var grid3 = Array<Square>(repeating: Square(), count: 16)
hoặc
var grid4 = [Square](repeating: Square(), count: 16)
Tất nhiên, cả hai cũng hoạt động với Square?
và nil
.
Tôi thấy rằng nó chỉ gọi là 'Square()' một lần. Vì vậy, tất cả các cá thể trong mảng này trỏ đến cùng một tham chiếu. –
Điều này không chính xác. Điều này tạo ra một mảng với 16 giá trị. OP đã yêu cầu tạo một mảng trống mới với _capacity_ để giữ 16 giá trị. Tôi tin rằng điều này không thể được thực hiện trong Swift. Bạn chỉ có thể tạo mảng trống _and_then_ dự trữ dung lượng. –
Hãy thử:
var grid = Array<Square>(count: 16, repeatedValue: aSquare)
var actions:[AnyObject?] = [AnyObject?](count: 3, repeatedValue: nil)
Swift 3
var grid : [Square]?
grid?.reserveCapacity(16)
Tôi tin rằng nó có thể đạt được trong một dòng là tốt.
Tôi có vấn đề với câu trả lời được chấp nhận với 'lặp đi lặp lại: nil' vì vậy đây là một lựa chọn tốt hơn cho tôi. –
Bạn nhận được lỗi đó bởi vì bạn đang thực hiện cuộc gọi phương thức bên ngoài một hàm (trong một lớp, cấu trúc, enum hoặc ở cấp cao nhất). Hãy thử điều này bên trong một hàm, hoặc, di chuyển cuộc gọi reserveCapacity vào phương thức init() của lớp của bạn. – Bill