なぜこれがM_PIを文字列「3.141593」としてNSMutableArrayに追加するのですか?M_PIをfloatとして配列に追加するにはどうすればよいですか?
- (void)pushOperand:(float)operand
{
[self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}
[self pushOperand:M_PI];
なぜこれがM_PIを文字列「3.141593」としてNSMutableArrayに追加するのですか?M_PIをfloatとして配列に追加するにはどうすればよいですか?
- (void)pushOperand:(float)operand
{
[self.operandStack addObject:[NSNumber numberWithFloat:operand]];
}
[self pushOperand:M_PI];
他の人が言っているように、フロートを直接に保存することはできませんNSMutableArray
。ただし、コードはすでに値をのインスタンスとして挿入していますがNSNumber
、これは必要なことです。後で、オブジェクトを配列から引き戻すときに、次のようなものを使用してオブジェクトをPODタイプに復元できます。
double value = 0;
id topOfStack = [stack popOperand];
if ([topOfStack isKindOfClass:[NSNumber class]])
result = [topOfStack doubleValue];
ちなみに、スタンフォードiOSコースを受講してくれたことを称賛します:-)
M_PIはNSObjectに変換されます。これはオブジェクトですが、文字列ではありません。
にPODタイプを追加することはできずNSMutableArray
、NSObjectとその子孫のみを追加できます。これretain
は、オブジェクトを追加するrelease
ときと削除するときに、メッセージがオブジェクトに送信されるためです。floatをそのまま使用する場合は、smthを検討する必要があります。のようにstd::vector<float>
。
フロートに最も近いものはNSNumberです。
NSNumber* mpi= @(M_PI);
コードは正常に見えます。配列に追加すると、NSStringだと思う理由は何ですか?