NSArray 越界检查
-
16-12-2019 - |
题
菜鸟问题..检查 NSArray 或 NSMutableArray 的索引是否存在的最佳方法是什么。我到处找都没有结果!!
这是我尝试过的:
if (sections = [arr objectAtIndex:4])
{
/*.....*/
}
或者
sections = [arr objectAtIndex:4]
if (sections == nil)
{
/*.....*/
}
但两者都会抛出“越界”错误,不允许我继续
(不要用 try catch 回复,因为这对我来说不是解决方案)
提前致谢
解决方案
if (array.count > 4) {
sections = [array objectAtIndex:4];
}
. 其他提示
如果您有一个整数索引(例如,i
),通常可以通过检查如此
int indexForObjectInArray = 4;
NSArray yourArray = ...
if (indexForObjectInArray < [yourArray count])
{
id objectOfArray = [yourArray objectAtIndex:indexForObjectInArray];
}
. 请记住 NSArray 位于 顺序 从 0到N-1 项目
你正在尝试 access
item
其中有 超出限制 和一个 array
是 nil
那么编译器会抛出 bound error
.
编辑 :@sch 上面的答案显示了我们如何检查 NSArray 中是否存在必需的有序项目。
您可以使用 MIN
操作员像这样默默地失败 [array objectAtIndex:MIN(i, array.count-1)]
, ,获取数组中的下一个对象或最后一个对象。例如,当您想要连接字符串时可能很有用:
NSArray *array = @[@"Some", @"random", @"array", @"of", @"strings", @"."];
NSString *concatenatedString = @"";
for (NSUInteger i=0; i<10; i++) { //this would normally lead to crash
NSString *nextString = [[array objectAtIndex:MIN(i, array.count-1)]stringByAppendingString:@" "];
concatenatedString = [concatenatedString stringByAppendingString:nextString];
}
NSLog(@"%@", concatenatedString);
结果:“一些随机的字符串数组。。。。。”
不隶属于 StackOverflow