0

なぜこれがM_PIを文字列「3.141593」としてNSMutableArrayに追加するのですか?M_PIをfloatとして配列に追加するにはどうすればよいですか?

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

[self pushOperand:M_PI];
4

5 に答える 5

1

他の人が言っているように、フロートを直接に保存することはできませんNSMutableArray。ただし、コードはすでに値をのインスタンスとして挿入していますがNSNumber、これは必要なことです。後で、オブジェクトを配列から引き戻すときに、次のようなものを使用してオブジェクトをPODタイプに復元できます。

double value = 0;

id topOfStack = [stack popOperand];

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

ちなみに、スタンフォードiOSコースを受講してくれたことを称賛します:-)

于 2012-12-12T02:46:29.747 に答える
0

M_PIはNSObjectに変換されます。これはオブジェクトですが、文字列ではありません。

于 2012-12-12T02:20:05.810 に答える
0

にPODタイプを追加することはできずNSMutableArray、NSObjectとその子孫のみを追加できます。これretainは、オブジェクトを追加するreleaseときと削除するときに、メッセージがオブジェクトに送信されるためです。floatをそのまま使用する場合は、smthを検討する必要があります。のようにstd::vector<float>

于 2012-12-12T02:26:10.030 に答える
0

フロートに最も近いものはNSNumberです。

NSNumber* mpi= @(M_PI);
于 2012-12-12T02:38:45.790 に答える
0

コードは正常に見えます。配列に追加すると、NSStringだと思う理由は何ですか?

于 2012-12-12T02:44:23.210 に答える