我制作了一些方法,从堆栈中提取数字和操作数,并以更用户友好的样式显示。问题在于descriptionString变量,当topOfStack为"+"时,它会部分返回null。我在下面显示日志。
+(NSString *)descriptionOfTopOfStack:(NSMutableArray *)stack
{
NSString *descriptionString;
id topOfStack = [stack lastObject];
NSString *secondInStack;
NSString *thirdInStack;
if (topOfStack)
[stack removeLastObject];
if ([topOfStack isKindOfClass:[NSNumber class]]) {
descriptionString = [topOfStack stringValue];
}
else if([topOfStack isKindOfClass:[NSString class]]){
if(([topOfStack isEqualToString:@"+"]) || ([topOfStack isEqualToString:@"—"])){
secondInStack = [self descriptionOfTopOfStack:stack];
thirdInStack = [self descriptionOfTopOfStack:stack];
descriptionString = [descriptionString stringByAppendingFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack];
NSLog(@"description is %@",descriptionString);
}
}
return descriptionString;
}
我用2+6做了一个例子,这是日志:
- 2012-02-21 22:09:39.983计算器[12536:f803]堆栈=(2.6."+")
- 2012-02-21 22:09:39.983计算器[12536:f803]描述为(null)
为什么descriptionString为null?我哪里搞错了?感谢
在行中:
descriptionString = [descriptionString stringByAppendingFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack];
变量descriptionString
是nil
。用以下内容替换该行。
descriptionString = [NSString stringWithFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack];
我怀疑您没有在if
的另一个分支中为descriptionString
变量设置值,所以您将字符串附加到null
。您可以设置变量,也可以使用[NSString stringWithFormat:format]
:
if ([topOfStack isKindOfClass:[NSNumber class]]) {
descriptionString = [topOfStack stringValue];
}
else if([topOfStack isKindOfClass:[NSString class]]){
if(([topOfStack isEqualToString:@"+"]) || ([topOfStack isEqualToString:@"—"])){
secondInStack = [self descriptionOfTopOfStack:stack];
thirdInStack = [self descriptionOfTopOfStack:stack];
descriptionString = [NSString stringWithFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack];
NSLog(@"description is %@",descriptionString);
}
}