我正在尝试实现一个简单的计算器,我必须在NSString类型的变量中更新当前操作(+, - ,* etc)。当前操作作为参数接收到模型。
-(double)doOperation:(NSString *)operation withOperand:(double)operand
{
if (!currentOperation)
{
anOperand = operand;
}
currentOperation = operation; //Invalid Summary in currentOperation; but + in operation
}
这可能有什么问题?如果NSString不允许直接赋值指针,那么替代方法是什么?
修改
注意:currentOperation是Controller类中的私有变量,operation是该方法的参数。
这是完整的代码
@interface CalculatorBrain : NSObject {
double anOperand;
NSString * currentOperaion;
}
- (double) doOperation: (NSString *) operation
withOperand: (double) operand;
@end
@implementation CalculatorBrain
- (double) doOperation: (NSString *) operation
withOperand: (double) operand
{
if (!currentOperaion)
{
anOperand = operand;
}
else if([currentOperaion isEqual: @"+"])
{
anOperand += operand;
}
else if([currentOperaion isEqual: @"-"])
{
anOperand -= operand;
}
else if([currentOperaion isEqual: @"*"])
{
anOperand *= operand;
}
else if([currentOperaion isEqual: @"/"])
{
anOperand /= operand;
}
currentOperaion = operation; //This is where the statement doesn't work as expected
if ([currentOperaion isEqual: @"="])
{
currentOperaion = nil;
}
return anOperand;
}
@end
答案 0 :(得分:4)
更准确地说,在iOs中为NSString分配=符号是否合法?
是。
这可能有什么问题?
如果您想稍后使用该实例,那么您没有获取会导致问题的字符串的所有权,请参阅memory management guide:
您可以使用
retain
取得对象的所有权 请记住,对象可能有多个所有者。取得对象的所有权是你说要让它保持活力的方式。
你可以-retain
字符串,或-copy
来避免外部代码的突变,例如:
// in -doOperation::
[currentOperation release];
currentOperation = [operation copy]; // copy if operation might be mutable
// relinquish ownership:
- (void)dealloc {
[currentOperation release];
[super dealloc];
}
另请查看declared properties。
答案 1 :(得分:1)
如果currentOperation声明为NSString,请尝试
currentOperation = [NSString stringWithString:operand];