爲什麼這會將M_PI作爲字符串「3.141593」添加到NSMutableArray中?我如何將M_PI作爲浮點數添加到數組中?當使用addObject時M_PI被轉換爲字符串
- (void)pushOperand:(float)operand
{
[self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}
[self pushOperand:M_PI];
爲什麼這會將M_PI作爲字符串「3.141593」添加到NSMutableArray中?我如何將M_PI作爲浮點數添加到數組中?當使用addObject時M_PI被轉換爲字符串
- (void)pushOperand:(float)operand
{
[self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}
[self pushOperand:M_PI];
正如其他人所說的,您不能直接在NSMutableArray
中存儲浮點數。但是,您的代碼已經將該值作爲NSNumber
的實例插入,而這正是您想要的。
double value = 0;
id topOfStack = [stack popOperand];
if ([topOfStack isKindOfClass:[NSNumber class]])
result = [topOfStack doubleValue];
榮譽的方式,做了斯坦福大學的iOS當然:-)
:後來,當你拉的對象回來了數組,你可以用這樣的恢復到一個POD類型M_PI轉換爲一個NSObject,它是一個對象,但不是一個字符串。
您不能將POD類型添加到NSMutableArray
,只能添加NSObject和後代。這是因爲retain
消息在您添加時發送到對象,release
在刪除時發送。如果你想使用float,那麼你應該考慮smth。如std::vector<float>
。
最接近的一個浮球是一個NSNumber的:
NSNumber* mpi= @(M_PI);
您的代碼看起來不錯。什麼讓你認爲這是一個NSString添加到你的數組?
什麼將其轉換爲NSObject? M_PI不是一個常量浮點數嗎?那麼你是說浮動轉換爲對象與任何轉換? –
我還沒有理解這個答案,如果他意味着M_PI是一個錯誤的對象。 –
[NSNumber numberWithFloat:operand]將float轉換爲從NSObject繼承的NSNumber。這就是爲什麼你可以通過NSLog(「%@」,...)轉儲對象作爲一個NSObject,看起來像一個字符串。 – neo