Objective-C Быстрое перечисление
Быстрое перечисление - это особенность Objective-C, которая помогает при перечислении через коллекцию. Итак, чтобы узнать о быстром перечислении, нам нужно сначала узнать о коллекции, которая будет объяснена в следующем разделе.
Коллекции в Objective-C
Коллекции - это фундаментальные конструкции. Он используется для хранения и управления другими объектами. Вся цель коллекции состоит в том, что она предоставляет общий способ эффективного хранения и извлечения объектов.
Есть несколько разных типов коллекций. Хотя все они выполняют одну и ту же цель - могут удерживать другие объекты, в основном они различаются способом получения объектов. Наиболее распространенные коллекции, используемые в Objective-C:
- NSSet
- NSArray
- NSDictionary
- NSMutableSet
- NSMutableArray
- NSMutableDictionary
Если вы хотите узнать больше об этих структурах, обратитесь к хранилищу данных в Foundation Framework .
Синтаксис быстрого перечисления
for (classType variable in collectionObject ) {
statements
}
Вот пример быстрого перебора.
#import <Foundation/Foundation.h>
int main() {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray *array = [[NSArray alloc]
initWithObjects:@"string1", @"string2",@"string3",nil];
for(NSString *aString in array) {
NSLog(@"Value: %@",aString);
}
[pool drain];
return 0;
}
Теперь, когда мы скомпилируем и запустим программу, мы получим следующий результат.
2013-09-28 06:26:22.835 demo[7426] Value: string1
2013-09-28 06:26:22.836 demo[7426] Value: string2
2013-09-28 06:26:22.836 demo[7426] Value: string3
Как вы можете видеть на выходе, каждый из объектов в массиве печатается в определенном порядке.
Быстрый перебор назад
for (classType variable in [collectionObject reverseObjectEnumerator] ) {
statements
}
Вот пример reverseObjectEnumerator в быстром перечислении.
#import <Foundation/Foundation.h>
int main() {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray *array = [[NSArray alloc]
initWithObjects:@"string1", @"string2",@"string3",nil];
for(NSString *aString in [array reverseObjectEnumerator]) {
NSLog(@"Value: %@",aString);
}
[pool drain];
return 0;
}
Теперь, когда мы скомпилируем и запустим программу, мы получим следующий результат.
2013-09-28 06:27:51.025 demo[12742] Value: string3
2013-09-28 06:27:51.025 demo[12742] Value: string2
2013-09-28 06:27:51.025 demo[12742] Value: string1
Как вы можете видеть в выводе, каждый из объектов в массиве печатается, но в обратном порядке по сравнению с обычным быстрым перечислением.