如何在NSString创建的NSNArray中对NSNumber进行操作

时间:2012-01-26 08:34:36

标签: objective-c nsstring nsarray nsnumber

我有一些方法。

 ....{
 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中对数字进行数学运算?

3 个答案:

答案 0 :(得分:2)

您在代码中引用NSNumber是一个错误,您很幸运,您的代码没有抛出无法识别的选择器异常。你的destinationArray是NSStrings的数组,而不是NSNumbers。恰好,NSStringNSNumber都有doubleValueintValue方法。因此,当您在循环中说[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]