Không chỉ bạn cần phải khởi tạo cả hai mảng và subarrays trước khi có thể gán bất kỳ giá trị, mà còn mỗi chiều dài mảng phải lớn hơn vị trí chỉ mục mà bạn đang cố gắng đặt.
Điều này là do Swift không khởi tạo các mạng phụ cho bạn, không tăng độ dài mảng khi gán cho chỉ mục.
Ví dụ, đoạn mã sau sẽ thất bại:
var a = [Int]()
a[0] = 1
// fatal error: Index out of range
Thay vào đó, bạn có thể khởi tạo một mảng với số phần tử mà bạn muốn giữ, điền nó với một giá trị mặc định, không ví dụ:
var a = Array(repeating: 0, count: 100)
a[0] = 1
// a == [1, 0, 0, 0...]
để tạo ra một ma trận 100 100 khởi tạo giá trị 0:
var a = Array(repeating: Array(repeating: 0, count: 100), count: 100)
a[0][0] = 1
Nếu bạn không muốn chỉ định kích thước ban đầu cho ma trận của mình, bạn có thể thực hiện theo cách này:
var a = [[Int]]()
a.append([])
a[0].append(1)
Nguồn
2017-08-17 22:44:25
Cảm ơn bạn rất nhiều, Nó hoạt động với bất kỳ loại mảng nào? Chẳng hạn như .. mảng của UIView và khác –
Nó nên vì 'mảng 'có thể giữ bất kỳ loại. Chỉ cần thay đổi khai báo và giá trị được truyền vào tham số 'repeating' bên trong. Bạn thậm chí có thể tạo các giá trị tùy chọn và chuyển vào 'nil' cho giá trị lặp lại. – rmaddy