使用addObject时,M_PI将转换为字符串

时间:2012-12-12 02:17:50

标签: objective-c

为什么将M_PI作为字符串“3.141593”添加到NSMutableArray?如何将M_PI作为浮点数添加到数组中?

- (void)pushOperand:(float)operand
{
    [self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}

[self pushOperand:M_PI];

5 个答案:

答案 0 :(得分:1)

正如其他人所说,你不能直接在NSMutableArray中存储浮动。您的代码已经将值插入NSNumber的实例,但这就是您想要的。稍后,当您将对象拉回数组时,可以将其恢复为POD类型,如下所示:

double value = 0;

id topOfStack = [stack popOperand];

if ([topOfStack isKindOfClass:[NSNumber class]]) 
    result = [topOfStack doubleValue];

顺便说一句,赞美斯坦福iOS课程: - )

答案 1 :(得分:0)

M_PI转换为NSObject,它是一个对象但不是字符串。

答案 2 :(得分:0)

您不能将POD类型添加到NSMutableArray,只能添加NSObject和后代。这是因为retain消息在您添加时会发送到对象,而release会在删除时发送。如果你想按原样使用float,那么你应该考虑使用smth。比如std::vector<float>

答案 3 :(得分:0)

与浮点数最接近的是NSNumber:

NSNumber* mpi= @(M_PI);

答案 4 :(得分:0)

您的代码看起来很好。是什么让你认为它被添加到你的阵列时是一个NSString?