Эта конструкция представляет собой цикл for
другого типа, который выполняется над элементами в коллекции Objective-C, а не в массиве C. Первая часть определяет объект, который устанавливается в один элемент коллекции при каждом запуске цикла, а вторая часть - это коллекция для перечисления. Например, код:
NSArray *array = [NSArray arrayWithObjects:@"foo", @"bar", nil];
for(NSString *string in array) {
NSLog(string);
}
будет печатать:
foo
bar
Это определяет NSString *string
, что при каждом запуске цикла устанавливается следующий объект в NSArray *array
.
Аналогично, вы можете использовать перечисление с экземплярами NSSet (где порядок объектов не определен) и NSDictionary (где он будет перечислять по ключам, хранящимся в словаре - вы можете перечислять по значениям, перечисляя по ключам, затем вызов valueForKey:
в словаре с использованием этого ключа).
Это очень похоже на конструкцию в C:
int array[2] = { 0, 1 };
for(int i = 0; i < 2; i++) {
printf("%d\n", array[i]);
}
который печатает:
0
1
Это всего лишь синтаксический способ сделать код более читабельным и скрыть некоторые причудливые перечисления, которые входят в перечисление объектов в NSArray, NSSet или NSDictionary. Более подробная информация приведена в разделе Fast Enumeration документа Objective-C 2.0 Language Language.