2015-04-18 2 views
0

У меня есть Swift массив пользовательских объектов, которые я бы хотел многократно заполнить и очистить. Что-то вроде этого:Заполнение и очистка массива массивов в Swift

var myArray:[[CustomClass]]=[[CustomClass]]() 
myArray[0][0]=firstItem 
myArray[1][5]=secondItem 

// Later... 
myArray=[[CustomClass]]() 
myArray[2][3]=firstItem 
myArray[0][0]=secondItem 

Все, что я пытаюсь, похоже, дает ошибки «индекс массива вне диапазона». Каков правильный способ сделать это? Спасибо за прочтение.

+0

В вашем примере вы получаете доступ к (пустым) массивам по индексу. Это приводит к тому, что «индекс массива выходит за пределы диапазона», потому что он ... пуст. Если вы хотите добавить что-то в массив, вы можете использовать либо 'append()', либо '+ = [CustomClass]' – Eendje

ответ

1

Вы не можете добавить товар к своему array следующим образом. Вам нужно использовать метод append.

var myArr:[[Int]]=[] 

myArr.append([0,1,2]) 
myArr.append([3,4,5]) 
myArr.append([6,7,8]) 


println(myArr) // "[[0, 1, 2], [3, 4, 5], [6, 7, 8]]" 
println(myArr[2][2]) // 8 
1

От Apple's docs

Вы можете использовать синтаксис индекс для изменения существующего значения по данному индексу

shoppingList[0] = "Six eggs" 

Вы можете также использовать подстрочный синтаксис изменить диапазон значений сразу

shoppingList[4...6] = ["Bananas", "Apples"] 

Но для добавления новых элементов в массиве вам нужно использовать append

1

Вы не можете динамически создавать индексы массива путем доступа к ним, вы должны специально создать хранилище в массиве.

var matrix = [[CustomClass]](count: 10, repeatedValue: []) 

Но это выделяет только 1 размер матрицы. repeatedValue должен быть массивом CustomClass.

var row = [CustomClass](count: 10, repeatedValue: CustomClass()) 

Взяв все вместе, вы получите окончательный инициализатор для матрицы 10x10, используя значения по умолчанию для каждого элемента.

var matrix = [[CustomClass]](count: 10, repeatedValue: [CustomClass](count: 10, repeatedValue: CustomClass())) 

Если вы не имеете хорошее значение по умолчанию для вашего CustomClass, то вам понадобится матрица провести дополнительный.

var matrix = [[CustomClass?]](count: 10, repeatedValue: [CustomClass?](count: 10, repeatedValue: nil)) 
Смежные вопросы