这是我的代码
我循环遍历数组并添加到NSNumber
。
NSNumber *totalValue = 0;
NSMutableArray *items = [10, 35, 25]; // Just for demo
for (int i=0; i < items.count; i++)
{
totalValue = totalValue + [items objectAtIndex:i] // How do I add the totalValue?
}
有人可以帮我解决这个问题吗?
答案 0 :(得分:9)
NSNumber
是一个Objective-C类。与C ++不同,运算符不能在Objective-C中重载,因此您必须手动调用所有内容。
NSNumber *totalValue = [NSNumber numberWithInt:0];
for(…) {
totalValue = [NSNumber numberWithInt:[totalValue intValue] + [[items objectAtIndex:i] intValue]];
}
您可能希望使用NSInteger
,这更快(特别是对于大量项目:内存分配很昂贵):
NSInteger totalValueInteger = 0; // no pointer, NSInteger is a POD!
for (…) {
totalValueInteger += [[items objectAtIndex:i] integerValue];
}
NSNumber *totalValue = [NSNumber numberWithInteger:totalValueInteger];
当你需要一个Objective-C对象时,你应该只使用NSNumber
,就像在数组,字典或编码器中一样。否则,请使用NSInteger
,int
或double
等POD。
答案 1 :(得分:1)
首先,您可以使用KVC完成整个过程:
NSNumber *total = [items valueForKeyPath:@"@sum.integerValue"];
但是要回答你原来的问题,NSNumber
是不可变的,这意味着你不能改变它或增加它的值。在循环的每次迭代中创建一个新的NSNumber
是低效且浪费的。
您应该使用标准int
或NSInteger
来总计总数,然后如果需要那么将结果值转换为NSNumber
。
答案 2 :(得分:0)
也可以使中间体成为一个int。
int temp = 0;
for(…) {
temp += [[items objectAtIndex:i] intValue];
}
NSNumber *totalValue = [NSNumber numberWithInt:temp];