I stumbled across the following shortcut in setting up a for loop (shortcut compared to the textbook examples I have been using):
for (Item *i in items){ ... }
As opposed to the longer format:
for (NSInteger i = 0; i < [items count]; i++){ ... } //think that's right
If I'm using the shorter version, is there a way to remove the item currently being iterated over (ie 'i')? Or do I need to use the longer format?
I use this code for this:
The former loop is a "for-each" loop in Objective C.
*i is a pointer to the direct item in the items-Array (most of the time this will be NSMutableArray).
This way you can operate directly on the item:
This (should) work - I am currently not working on my Mac and can't check it. However it might be that Objective-C Prevents removing objects while iterating over the collection (that is quite common in most languages).
An Objective-C collection must not be modified during enumeration.
You may use this variant to delete objects from collection:
You cannot remove objects from array while fast-enumerating it:
Anyway why do you need to change you container while enumerating it? Consider storing elements that need to be deleted and remove them from your container using
removeObjectsInArray:
orremoveObjectsAtIndexes:
method.Just add keyword
break;
after removing the item...