Я споткнулся через следующий ярлык в установке для цикла (ярлык по сравнению с примерами из учебника, которые я использовал):
for (Item *i in items){ ... }
В противоположность более длинному формату:
for (NSInteger i = 0; i < [items count]; i++){ ... } //think that's right
Если я использую более короткую версию, есть ли способ удалить объект, в настоящее время выполняемый с помощью итераций по (т.е. 'я')? Или я должен использовать более длинный формат?
Вы не можете удалять объекты из массива, пока быстрое перечисление it:
нумерация «безопасна» - счетчик {{1 }} имеет защиту от мутаций, так что если вы попытаетесь изменить коллекцию во время перечисления, возникнет исключение .
В любом случае, зачем вам менять контейнер при его перечислении? Рассмотрите возможность сохранения элементов, которые необходимо удалить, и удаления их из контейнера с помощью метода removeObjectsInArray:
или removeObjectsAtIndexes:
.
Первый цикл - это цикл "для каждого" в Objective C.
* i - указатель на прямой элемент в массиве items (в большинстве случаев это будет NSMutableArray).
Таким образом, вы можете работать непосредственно с элементом:
[items removeObject: i];
Это (должно) работать - в настоящее время я не работаю на своем Mac и не могу его проверить. Однако это может быть Objective-C Предотвращает удаление объектов во время итерации по коллекции (что довольно часто встречается в большинстве языков).