我有一些方法。
....{
NSString *mean = @"1:1:1:1:1:1:1:1:1";
tab = [self moveSourceArrayToDestinationArray:mean];
....}
-(NSArray*)moveSourceArrayToDestinationArray:(NSString*)sourceArray{
NSArray *destinationArray = [sourceArray componentsSeparatedByString:@":"];
for (NSNumber *number in destinationArray) {
sum += [number doubleValue];
}
NSLog(@"%d", [destinationArray objectAtIndex:1] * 5); // invalid operands to binary expression ('id' and 'int')
return destinationArray;
}
如何在NSArray中对数字进行数学运算?
答案 0 :(得分:2)
您在代码中引用NSNumber是一个错误,您很幸运,您的代码没有抛出无法识别的选择器异常。你的destinationArray
是NSStrings的数组,而不是NSNumbers。恰好,NSString
和NSNumber
都有doubleValue
和intValue
方法。因此,当您在循环中说[number doubleValue]
时,实际上最终会调用[NSString doubleValue]
,这当然仍会返回您想要的数字。但是,如果您尝试致电[number shortValue]
,其中shortValue
是仅存在于NSNumber
而非NSString
的选择器,则您的代码会抛出异常而无法正常工作
这个答案的寓意是你应该在你的代码中删除对NSNumber的任何引用,或者实际上将destinationArray
中的对象转换为NSNumber。否则,您可能会遇到更多麻烦。
答案 1 :(得分:1)
最简单的方法是从NSNumber对象中检索数值,这是您之前在代码片段中已经做过的事情。例如,尝试:
NSLog(@"%d", [[destinationArray objectAtIndex:1] intValue] * 5);
请参阅NSNumber文档中标题为“访问数值”的数字访问函数的完整列表。
答案 2 :(得分:1)
[destionationArray objectAtIndex:index]
处的对象也可能是NSNumber。因此,此时您还必须[[destinationArray objectAtIndex:index] doubleValue]
。