Objective-C 快速枚举

快速枚举是 Objective-C 的一项功能,有助于枚举集合。因此,为了了解快速枚举,我们需要先了解集合,这将在下一节中进行解释。


Objective-C 中的集合

集合是基本的构造。它用于保存和管理其他对象。集合的全部目的是提供一种有效存储和检索对象的通用方法。

有几种不同类型的集合。虽然它们都实现了能够保存其他对象的相同目的,但它们的主要区别在于检索对象的方式。Objective-C 中使用的最常见集合是:

  • NSSet
  • NSArray
  • NSDictionary
  • NSMutableSet
  • NSMutableArray
  • NSMutableDictionary

If you want to know more about these structures, please refer data storage in Foundation Framework.

如果您想了解更多关于这些结构的知识,请参阅 基础框架中的数据存储


Fast enumeration 语法

  1. for (classType variable in collectionObject ) {
  2. statements
  3. }

下面是一个快速枚举的实例。

  1. #import <Foundation/Foundation.h>
  2. int main() {
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  4. NSArray *array = [[NSArray alloc]
  5. initWithObjects:@"string1", @"string2",@"string3",nil];
  6. for(NSString *aString in array) {
  7. NSLog(@"Value: %@",aString);
  8. }
  9. [pool drain];
  10. return 0;
  11. }

结果如下:

  1. 2022-07-07 06:26:22.835 demo[7426] Value: string1
  2. 2022-07-07 06:26:22.836 demo[7426] Value: string2
  3. 2022-07-07 06:26:22.836 demo[7426] Value: string3

正如您在输出中看到的,数组中的每个对象都按顺序打印。


遍历快速枚举

  1. for (classType variable in [collectionObject reverseObjectEnumerator] ) {
  2. statements
  3. }

下面是快速枚举中 reverseObjectEnumerator 的实例。

  1. #import <Foundation/Foundation.h>
  2. int main() {
  3. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  4. NSArray *array = [[NSArray alloc]
  5. initWithObjects:@"string1", @"string2",@"string3",nil];
  6. for(NSString *aString in [array reverseObjectEnumerator]) {
  7. NSLog(@"Value: %@",aString);
  8. }
  9. [pool drain];
  10. return 0;
  11. }

结果如下:

  1. 2022-07-07 06:27:51.025 demo[12742] Value: string3
  2. 2022-07-07 06:27:51.025 demo[12742] Value: string2
  3. 2022-07-07 06:27:51.025 demo[12742] Value: string1

正如您在输出中看到的,数组中的每个对象都是打印的,但与普通快速枚举相反。