0

我正在编写一个简单的计算器应用程序。我想实现一个堆栈来存储用户输入的运算符。最初,我想使用 chars,但是当我尝试将 removelastobject 和 last 对象用于我的 pop 方法并使用 addobject 用于我的 push 方法时遇到了一些问题。

相反,我使用 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

据我了解,您的运算符不是对象类型,而是基本数据类型。您可以传递一个 NSValue,然后可以将其声明为 id,但我很确定您会更适合特定的原始值。

如果您将方法设置为接收 char 指针,那么您应该没问题。

于 2012-07-06T16:23:19.297 回答
0

使用 id 可以,但我认为您可能希望使用抽象类并从中派生您的运算符。然后你可以使用

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

NSArray 只存储对象;您不能将原始类型存储在一个中。如果您只想存储值,可以将它们包装在 NSNumber 或 NSValue 的实例中。

于 2012-07-05T04:31:15.260 回答