Вы действительно создаете массив массивов. Вы не можете получить доступ к индексам, которые еще не созданы, поэтому вместо этого просто создавайте один столбец за раз и добавляйте к нему элементы, а затем добавляйте каждый массив столбцов в multiArray
:
var multiArray = [[Tile]]()
var gb = gameBoard.frame.width/4
for xItem in 0...3 { //DRAW TILE ON X AXIS
var col = [Tile]()
for yItem in 0...3 { //DRAW TILE ON Y AXIS
//CREATES A VARIABLE FOR TILE WITH PROPERTIES
tileView = Tile(frame: CGRect(x: (CGFloat(xItem) * gb), y: (CGFloat(yItem) * gb), width: gb, height: gb))
gameBoard.addSubview(tileView) //DRAWS TILE ONTO PARENT VIEW
col.append(tileView)
}
multiArray.append(col)
}
Метод, который вы упомянули для инициализации multiArray, работает лучше всего, если ваш массив заполнен типами значений (например, Int
или Double
), и у вас есть разумное значение по умолчанию (например, 0
). Это не сработает, если ваш массив будет содержать экземпляры классов. Вы могли бы создать свой массив [[Tile?]]
и инициализировать его значениями nil
, но позже вам придется разобраться с развертыванием опций. append
метод лучше всего подходит для вашего случая.