Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Enumeration

Für jedes Objekt in einem Array eine Operation aufzuführen, ist keine ungewöhnliche Aufgabe in einem Objective-C Programm. Es kann das Setzen von Werten sein, manchmal aber auch so triviale Dinge wie die Ausgabe eines Textes auf der Console. In allen bisherigen Beispielen wurden solche Aufgaben mit einer for-Schleife erledigt, und es spricht auch nichts dagegen, Objekte in einer Liste auf diese Art anzusprechen.
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, denn auch mit ihnen kann jedes Objekt in einem Array angesprochen werden, allerdings sieht der Code mit einem Enumerator etwas anders aus:
NSArray *myArray;
myArray = [
NSArray arrayWithObjects:@"Alpha",@"Beta",@"Gamma",nil];

NSEnumerator *myEnumerator = [myArray objectEnumerator];

NSString *myText;
while(myText = [myEnumerator nextObject])
{

    NSLog
(@"%@",myText);
}
Die Nachricht nextObject beauftragt den Enumerator, immer das nächste Objekt der Auflistung abzugeben, und so lassen sich mit Hilfe der Schleife problemlos alle Objekte im Array durchlaufen. Da die Objekte ursprünglich vom Typ NSString waren, ist es ein Leichtes, sie wieder einem Bezeichner dieses Typs zuzuweisen und mit NSLog auszugeben.

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 *personArray;
personArray = [
NSArray arrayWithObjects:myPerson1,myPerson2,nil];

NSEnumerator *personEnumerator = [personArray objectEnumerator];

Person *aPerson;
while(aPerson = [personEnumerator nextObject])
{

    NSLog
(@"%@",[aPerson name]);
    NSLog
(@"%@",[aPerson vorname]);
}
Ein Enumerator ist perfekt geeignet, sämtliche Objekte in einem Array zu durchlaufen 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