En développant un peu la question, il existe plusieurs situations dans lesquelles on peut avoir besoin du dernier objet d'un tableau, avec différentes façons de l'obtenir.
Dans un programme Cocoa classique
Si l'on veut simplement obtenir l'objet au cours d'un programme Cocoa standard, alors ceci fera l'affaire :
[myArray lastObject]
Pour répondre à la préoccupation du guichet, il n'est pas nécessaire de mettre en œuvre le sien non plus :
NSUInteger myCount = [myArray count];
Utilisation du codage clé-valeur (KVC)
Si l'on a besoin d'accéder au dernier objet d'un tableau par le biais de KVC, l'histoire nécessite un peu d'explication.
Tout d'abord, demander la valeur d'une clé normale à partir d'un tableau créera un nouveau tableau composé des valeurs de cette clé pour chacun des objets du tableau. . En d'autres termes, une demande de la clé lastObject
d'un tableau fera en sorte que le tableau envoie valueForKey:
à chacun des objets en utilisant la clé lastObject
sur eux. Outre le fait que ce n'est pas le résultat escompté, il est probable qu'une exception sera levée.
Ainsi, si l'on a vraiment besoin d'envoyer une clé au tableau lui-même (par opposition à son contenu), la clé doit être précédée d'une balise @
-signe. Cela indique au tableau que la clé est destinée au tableau lui-même, et non à son contenu.
La clé doit donc avoir la forme @lastObject
et être utilisé comme ceci :
NSArray *arr = @[@1, @2, @3];
NSNumber *number = [arr valueForKey: @"@lastObject"];
Dans un descripteur de tri
Un exemple de la façon dont cette clé pourrait être utilisée dans un programme réel est une situation où un tableau de tableaux doit être trié par la fonction dernier dans chacun des tableaux intérieurs.
La clé ci-dessus est simplement utilisée dans le descripteur de tri :
NSArray *arrayOfArrays = @[@[@5, @7, @8], @[@2, @3, @4, @6], @[@2, @5]];
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @"@lastObject" ascending: YES];
NSArray *sorted = [arrayOfArrays sortedArrayUsingDescriptors: @[sd]];
Dans un prédicat
De même, afin de filtrer un tableau de tableaux, la clé peut être utilisée directement dans un prédicat :
NSPredicate *pred = [NSPredicate predicateWithFormat: @"self.@lastObject > 5"];
NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred];
Les personnes préférant laisser le self
-La sortie partielle peut simplement utiliser le format @"@lastObject > 5"