因此,我有一个数组,其中的项目数量可能会有所不同.我想知道是否还有其他方法可以得到NSArray的最后一个对象?我确实想过使用int计数器来追踪数组中的物品数量,但这似乎太麻烦了.

有人知道比这更好吗?

推荐答案

对这个问题进行一点扩展,在几种情况下,人们可能需要数组的最后一个对象,以及获取它的不同方法.

在一个纯可可计划中

如果只想在标准Cocoa程序中获取对象,那么这将实现:

[myArray lastObject]

为了解决柜台的问题,无需自行实施:

NSUInteger myCount = [myArray count];

使用键值编码(KVC)

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

首先,从数组will create a new array consisting of the values of that key for each of the objects in the array请求普通密钥的值.换句话说,从数组请求密钥lastObject将使数组使用密钥lastObject向每个对象发送valueForKey:.除了不是预期的结果,它还可能引发异常.

因此,如果一个人真的需要向数组本身发送一个键(与其内容相反),那么这个键需要在前面加上@号.这会告诉数组,该键用于数组本身,而不是其内容.

因此,密钥必须具有表单@lastObject,并按如下方式使用:

NSArray *arr = @[@1, @2, @3];

NSNumber *number = [arr valueForKey: @"@lastObject"];

在排序描述符中

这个键如何在实际程序中使用的一个例子是,一个数组需要按每个内部数组中的last个对象进行排序.

上述键仅用于排序描述符:

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"格式

Objective-c相关问答推荐

在哪里以及如何 __bridge

Xcode 的任何 ReSharper 类似功能?

UISearchDisplayController 没有结果tableView?

在我的 UIImageView 的子类中没有调用 drawRect

在 Objective-C 中在 iPhone 上使用 HTTP POST 和 GET 的教程

如果安装了应用程序,如何以编程方式判断?

在Objective C中迭代枚举?

动态转发: suppress Incomplete Implementation 警告

如何在 iPhone 上显示来自 API 的 HTML 文本?

如何在 iPhone 中将 NSData 转换为字节数组?

如何将 .plist 文件中的数据 struct 读入 NSArray

在不导入自己的情况下播放系统声音

何时在 iPhone 上使用 UIView 与 UIViewController?

ARC时代的财产与ivar

通过将另一个字符串重复给定次数来创建 NSString

在 iPhone 上查找用户的 Documents 目录的最佳方法是什么?

无法在 iOS7 上将 UITextField 添加到 UIAlertView ...在 iOS 6 中有效

如何使用图像和标签制作自定义 UIBarButtonItem?

iOS 上的电话号码格式

Unwind Segue 在 iOS 8 中不起作用