为什么将M_PI作为字符串“3.141593”添加到NSMutableArray?如何将M_PI作为浮点数添加到数组中?
- (void)pushOperand:(float)operand
{
[self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}
[self pushOperand:M_PI];
答案 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?