Enumeration
Für jedes Objekt in einem Array eine Operation aufzuführen, ist keine ungewöhnliche Aufgabe in einem Objective-C Programm. Das kann das Setzen von Werten sein, machmal aber auch so triviale Dinge wie die Ausgabe eines Textes auf der Console. In allen bisherigen Beispielen wurde das mit einer for-Schleife erledigt und es spricht auch nichts dagegen dieses Problem so anzugehen, erledigt es doch die gestellte Aufgabe zur vollsten Zufriedenheit.
Für jedes Objekt in einem Array eine Operation aufzuführen, ist keine ungewöhnliche Aufgabe in einem Objective-C Programm. Das kann das Setzen von Werten sein, machmal aber auch so triviale Dinge wie die Ausgabe eines Textes auf der Console. In allen bisherigen Beispielen wurde das mit einer for-Schleife erledigt und es spricht auch nichts dagegen dieses Problem so anzugehen, erledigt es doch die gestellte Aufgabe zur vollsten Zufriedenheit.
|
NSArray
*myArray; myArray = [NSArray arrayWithObjects:@"Alpha",@"Beta",@"Gamma",nil]; for(int i = 0; i < [myArray count]; i++) { NSLog(@"Index %d ist %@", i, [myArray objectAtIndex:i]); } |
Ein etwas anderer Ansatz ist hingegen die Verwendung von Enumeratoren, auch mit denen kann jedes Objekt in einem Array angesprochen werden, allerdings sieht der Code dann etwas anders aus:
|
NSArray
*myArray; myArray = [NSArray arrayWithObjects:@"Alpha",@"Beta",@"Gamma",nil]; NSEnumerator *myEnumerator = [myArray objectEnumerator]; NSString *myText; while(myText = [myEnumerator nextObject]) { NSLog(myText); } |
Es ist die Nachricht nextObject die, in Verbindung mit der while-Schleife, den Enumerator veranlasst, alle Objekt im Array durchzugehen. Da die Objekte im Array ursprünglich vom Typ NSString waren, ist es ein leichtes sie wieder einem Bezeichner dieses Types zuzuweisen und auszugeben.
Auch ein mit der Klasse Person gefülltes Array funktioniert mit einem Enumerator.
Auch ein mit der Klasse Person gefülltes Array funktioniert mit einem Enumerator.
|
Person
*myPerson1 = [[Person alloc] init]; [myPerson1 setName:@"Huber"]; [myPerson1 setVorname:@"Hans"]; [myPerson1 setAlter:32]; Person *myPerson2 = [[Person alloc] init]; [myPerson2 setName:@"Adrian"]; [myPerson2 setVorname:@"Fischer"]; [myPerson2 setAlter:55]; NSArray *myArray; myArray = [NSArray arrayWithObjects:myPerson1,myPerson2,nil]; NSEnumerator *myEnumerator = [myArray objectEnumerator]; Person *aPerson; while(aPerson = [myEnumerator nextObject]) { NSLog([aPerson name]); NSLog([aPerson vorname]); } |
Ein Enumerator ist perfekt dafür geeignet, sämtliche Objekte in einem Array durchzugehen und anzusprechen. Das ist seine einzige Stärke. Mit einem Enumerator Objekte aus einem NSMutableArray zu löschen oder hinzuzufügen wird allerdings nicht funktionieren, da dies die Auflistung des Enumerators durcheinander bringen würde.
nächste Seite
nächste Seite