我正在写一个简单的计算器应用程序。我想实现一个堆栈来存储用户输入的运算符。最初,我想使用字符但是当我尝试使用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;
}
答案 0 :(得分:1)
据我所知,您的运算符不是对象类型,而是基本数据类型。您可以传递NSValue,然后可以将其声明为id,但我很确定您更适合使用特定的原始值。
如果你设置方法来接收char指针,那么你应该没问题。
答案 1 :(得分:0)
使用id是可以的,但我认为你可能想要使用抽象类并从中派生出运算符。然后你可以使用
-(void)pushOperator:(MyOperator)op;
答案 2 :(得分:0)
NSArray只存储对象;你不能将原始类型存储在一个中。如果您只想存储值,可以将它们包装在NSNumber或NSValue的实例中。