0

私は簡単な電卓アプリを書いています。ユーザーが入力した演算子を格納するスタックを実装したいと考えています。もともと、chars を使用したかったのですが、pop メソッドに removelastobject と last オブジェクトを使用し、push メソッドに addobject を使用しようとしたときに、いくつかの問題に遭遇しました。

代わりに、タイプとして id を使用しました。これは間違っていますか、それともこの問題を解決するためのより良い方法はありますか?

私の.hで:

//Brain.h
-(void)pushOperator:(id)op;

私の.mで:

 //Brain.m
 #import Brain.h
 @interface CalculatorBrain()
 @property (nonatomic,strong) NSMutableArray *operandStack;
 @property (nonatomic,strong) NSMutableArray *operatorStack;//This is the one I'm asking about
 @end

 @implementation CalculatorBrain

 @synthesize operatorStack = _operatorStack;


 - (NSMutableArray *) operatorStack
 {
    if (! _operatorStack)
     {
         _operatorStack = [[NSMutableArray alloc] init];
     }
     return _operatorStack;
 }

-(void)pushOperator:(id)op
{
    [self.operatorStack addObject:op];
}

-(id)popOperator
{
    NSObject *op = [self.operatorStack lastObject];
    if (op)
    {
        [self.operatorStack removeLastObject];
    }
    return op;
}
4

3 に答える 3

1

私が理解していることから、あなたの演算子はオブジェクト型ではなく、基本的なデータ型です。ID として要求できる NSValue を渡すことができますが、特定のプリミティブ値の方が適していると確信しています。

char ポインターを受け取るようにメソッドをセットアップする場合は、問題ありません。

于 2012-07-06T16:23:19.297 に答える
0

idを使用しても問題ありませんが、抽象クラスを使用して、そこから演算子を派生させることをお勧めします。その後、あなたは使用することができます

-(void)pushOperator:(MyOperator)op;
于 2012-07-05T03:53:55.393 に答える
0

NSArray はオブジェクトのみを格納します。プリミティブ型を 1 つに格納することはできません。値を保存するだけの場合は、NSNumber または NSValue のインスタンスでラップできます。

于 2012-07-05T04:31:15.260 に答える