集合類(如:NSArray、NSSet、NSDictionary等)都可獲取到NSEnumerator, 該類是一個抽象類,沒有用來建立實例的公有接口。NSEnumerator的nextObject方法能夠遍歷每一個集合元素,結束返回nil,經過與while結合使用可遍歷集合中全部項。 html
例子中使用了與前例相同的Photo對象,具體定義參考 隱式循環 這一節。 數組
#import <Foundation/Foundation.h> #import "Photo.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //while+NSEnumerator //定義對象的數組 NSArray *array = [NSArray arrayWithObjects:[[Photo alloc] init], [[Photo alloc] init],[[Photo alloc] init], nil]; //經過objectEnumberator獲取集合的NSEnumerator NSEnumerator *myEnumerator = [array objectEnumerator]; Photo *photo; //nextObject遍歷每一項,結束返回nil //注意這裏使用的是「=」號,因此最外面還要再添加一對() while((photo = [myEnumerator nextObject])) { [photo draw]; } [pool drain]; return 0; }
NSSet allObjects code
#import <Foundation/Foundation.h> #import "Photo.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //NSSet allObjects NSSet *set = [NSSet setWithObjects:[[Photo alloc] init], [[Photo alloc] init],[[Photo alloc] init], nil]; //allObjects僅能獲取NSArray,須要再次調用objectEnumberator //而且獲取的數組順序不肯定。 NSEnumerator *myEnumerator = [[set allObjects] objectEnumerator]; Photo *photo; while((photo = [myEnumerator nextObject])) { [photo draw]; } [pool drain]; return 0; }
NSDictionary allValues allKeys htm
#import <Foundation/Foundation.h> #import "Photo.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //NSDictionary allValues //NSDictionary 添加項時是value在前j,key在後的,與C#相反 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: [[Photo alloc] init], @"p1", [[Photo alloc] init], @"p2", [[Photo alloc] init], @"p3", nil]; //allValues 只能獲取字典中值的數組列表,注意列表是無序的。 NSEnumerator *myEnumerator = [[dict allValues] objectEnumerator]; Photo *photo; while((photo = [myEnumerator nextObject])) { [photo draw]; } //allKeys 遍歷字典中的全部key列表,而後能過objectForKey獲取值。注意列表是無序的。 myEnumerator = [[dict allKeys] objectEnumerator]; NSString *key; while((key = [myEnumerator nextObject])) { //objectForKey從字典中獲取key對應的值 [[dict objectForKey:key] draw]; } [pool drain]; return 0; }