如何获得NSArray的最后一个对象

所以我有一个数组的项目数量可能会有所不同。 我想知道是否有我能得到一个NSArray的最后一个对象? 我曾想过像int计数器跟踪数组中的项目数量,但似乎太麻烦了。

有人知道这比这更好吗?

在这个问题上扩展一点,有几种情况下,可能需要数组的最后一个对象,并用不同的方法来获得它。

在一个直的cocoa程序中

如果一个人只想在一个标准的Cocoa程序中获得这个对象,那么这个可以做到:

 [myArray lastObject] 

为了解决这个问题 – 不需要执行自己的任务:

 NSUInteger myCount = [myArray count]; 

使用键值编码(KVC)

如果需要通过KVC访问数组的最后一个对象,故事需要一些解释。

首先,从数组中请求一个普通的键的值将创build一个新的数组,该数组由该数组中每个对象的键值组成 。 换句话说,从数组中获取关键字lastObject的请求将使数组发送valueForKey:给每个使用关键字lastObject的对象。 除了不是预期的结果,它也可能会抛出一个例外。

因此,如果真的需要发送一个密钥到数组本身(而不是其内容),密钥需要预先加上@ -sign。 这告诉数组该键是用于数组本身,而不是其内容。

关键因此必须具有@lastObjectforms,并且可以像这样使用:

 NSArray *arr = @[@1, @2, @3]; NSNumber *number = [arr valueForKey: @"@lastObject"]; 

在一个sorting描述符中

一个真正的程序中如何使用这个键的例子是一个数组需要按照每个内部数组中的最后一个对象进行sorting的情况。

上面的键只是在sorting描述符中使用:

 NSArray *arrayOfArrays = @[@[@5, @7, @8], @[@2, @3, @4, @6], @[@2, @5]]; NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @"@lastObject" ascending: YES]; NSArray *sorted = [arrayOfArrays sortedArrayUsingDescriptors: @[sd]]; 

在谓词中

同样,为了过滤一个数组数组,键可以直接用在谓词中:

 NSPredicate *pred = [NSPredicate predicateWithFormat: @"self.@lastObject > 5"]; NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred]; 

人们宁愿离开self出局可以简单地使用格式@"@lastObject > 5"

 [yourArray lastObject]; 

请参阅文档

也许这样:

 id object = [myArray lastObject]; 

一个好的提示是select任何你想要阅读文档的符号。 例如,按住选项键,然后在Xcode编辑器中点击任何NSArray文本。

你会得到一个很好的基础知识popup窗口,以及一个完整的详细文档链接。

或者如果你想要看中:

 yourArray.lastObject