0

我花了几个小时试图弄清楚这个问题,我的眼睛受伤了——我已经在网上寻找了很长一段时间的答案(说出多少会很尴尬......)。我要做的就是在 anExpression 上使用 for-in 循环进行枚举,这是一个包含 NSNumbers 和 NSStrings 的 NSMutableArray。我的变量 ans 的 NSLog 打印返回一个空字符串。我究竟做错了什么?

  NSString *ans = @"";
    for (id obj in anExpression)
    {
        if ([obj isKindOfClass:[NSString class]])
            [ans stringByAppendingString:(NSString *)obj];
        if ([obj isKindOfClass:[NSNumber class]])
            [ans stringByAppendingString:(NSString *)[obj stringValue]];

        NSLog(@"String so far: %@ ", ans);
    }
4

3 回答 3

2

我想你的意思是

ans = [ans stringByAppendingString:(NSString *)obj];

不只是

[ans stringByAppendingString:(NSString *)obj];

NSStrings 是不可变的——你不能附加到它们上面。-stringByAppendingString:返回一个字符串(然后您可以将其分配给ans)。

或者,您可以使用NSMutableStringand-appendString:方法。

于 2010-11-30T17:55:04.457 回答
0

该方法stringByAppendingString:返回一个通过将给定字符串附加到接收器而生成的新字符串。

所以你要ans = [ans stringByAppendingString:obj];

于 2010-11-30T17:55:53.800 回答
0

嘿,抱歉编码格式不好,再次发布......

NSString *ans = @"";
for (id obj in anExpression)
{
    if ([obj isKindOfClass:[NSString class]])
        [ans stringByAppendingString:(NSString *)obj];
    if ([obj isKindOfClass:[NSNumber class]])
        [ans stringByAppendingString:(NSString *)[obj stringValue]];

    NSLog(@"String so far: %@ ", ans);
}
[ans autorelease];
NSLog(@"final string is: %@ ", ans);

return ans;
于 2010-11-30T17:53:12.260 回答