So I have an array which the amount of items could vary. I was wondering if there is anyway I can get the last object of an NSArray? I did think of having like an int counter to trace the amount of items in the array however that seems too much of a hassle.
Does anyone know anyway that’s better than this?
Expanding a bit on the question, there are several situations in which one could need the last object of an array, with different ways to obtain it.
In a straight Cocoa program
If one just wants to get the object in course of a standard Cocoa program, then this will do it:
To address the concern of the counter – no need to implement one’s own, either:
Using key-value coding (KVC)
In case one needs to access the last object of an array through KVC, the story requires a bit of explanation.
First, requesting the value of a normal key from an array will create a new array consisting of the values of that key for each of the objects in the array. In other words, a request for the key
lastObjectfrom an array will make the array sendvalueForKey:to each of the objects using the keylastObjecton them. Apart from not being the intended result, it will also likely throw an exception.So in case one really needs to send a key to the array itself (as opposed to its contents), the key needs to be prepended with an
@-sign. This tells the array that the key is intended for the array itself, and not its contents.The key therefore has to have the form
@lastObject, and be used like this:In a sort descriptor
An example of how this key could be used in a real program is a situation where an array of arrays needs to be sorted by the last object in each of the inner arrays.
The above key is simply used in the sort descriptor:
In a predicate
Likewise, in order to filter an array of arrays, the key can be used directly in a predicate:
People preferring to leave the
self-part out can simply use the format@"@lastObject > 5"