2016-04-08 2 views
1

Я заметил, что при попытке удалить или изменить элементы массива в цикле произошли странные вещи. Однако, когда вы делаете это при вызове enumerate() в массиве, он работает так, как ожидалось. Какова его концепция и когда мы должны использовать enumerate()?Когда использовать перечисление для массивов в Swift?

+1

Это не ясно, что вы просите. Можете ли вы предоставить образец вашей проблемы с циклом vs перечислением и ожидаемым и фактическим поведением? – JAL

+1

Посмотрите http://stackoverflow.com/a/32425212/1187415. –

ответ

3

Чтобы ответить на вопрос из заголовка, вы используете enumerate(), когда вам нужно значение индекса в дополнение к самой стоимости:

Если вам нужно целочисленное значение индекса каждого элемента, а также его значение, используйте enumerate() метод для итерации по массиву.

for (index, value) in shoppingList.enumerate() { 
    print("Item \(index + 1): \(value)") 
} 

enumerate() обеспечивает безопасный шаблон для изменения элементов массива в то время как итерация над ними:

for (index, (var value)) in shoppingList.enumerate() { 
    if value == "something" { 
     shoppingList[index] = "something-else" 
    } 
} 
+0

Что вы подразумеваете под * "while generate(), метод, используемый в регулярном цикле, не является." *? - «Обычный» цикл также безопасен: 'для элемента в массиве {array.removeAll()}' работает без проблем. –

+0

@MartinR Это приятно знать. Я предполагаю, что в любом случае я не должен комментировать причину, потому что слишком много частей могут быть в игре (это элемент класса или структуры, переменная цикла «var», сам массив изменен или только его элементы, и скоро). Идея была, конечно, продемонстрировать симпатичный трюк, который мой комментарий в середине нисколько не помог. Благодаря! – dasblinkenlight

Смежные вопросы