Я заметил, что при попытке удалить или изменить элементы массива в цикле произошли странные вещи. Однако, когда вы делаете это при вызове enumerate()
в массиве, он работает так, как ожидалось. Какова его концепция и когда мы должны использовать enumerate()
?Когда использовать перечисление для массивов в Swift?
ответ
Чтобы ответить на вопрос из заголовка, вы используете 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"
}
}
Что вы подразумеваете под * "while generate(), метод, используемый в регулярном цикле, не является." *? - «Обычный» цикл также безопасен: 'для элемента в массиве {array.removeAll()}' работает без проблем. –
@MartinR Это приятно знать. Я предполагаю, что в любом случае я не должен комментировать причину, потому что слишком много частей могут быть в игре (это элемент класса или структуры, переменная цикла «var», сам массив изменен или только его элементы, и скоро). Идея была, конечно, продемонстрировать симпатичный трюк, который мой комментарий в середине нисколько не помог. Благодаря! – dasblinkenlight
Это не ясно, что вы просите. Можете ли вы предоставить образец вашей проблемы с циклом vs перечислением и ожидаемым и фактическим поведением? – JAL
Посмотрите http://stackoverflow.com/a/32425212/1187415. –