0

これを何時間も理解しようとして目が痛くなりました-そして、オンラインでかなり長い間答えを探していました(どれくらいかを言うのは恥ずかしいでしょう...)。私がしようとしているのは、NSNumbers と NSStrings を保持する NSMutableArray である anExpression で for-in ループを使用して列挙することだけです。変数 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];

NSString は不変です -- それらに追加することはできません。新しい-stringByAppendingString:文字列を返します (これを に割り当てることができます)。ans

NSMutableStringまたは、 and-appendString:メソッドを使用することもできます。

于 2010-11-30T17:55:04.457 に答える
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 に答える
0

このメソッドは、指定された文字列をレシーバーに追加して作成された新しいstringByAppendingString:文字列を返します。

あなたが望んでいるのはans = [ans stringByAppendingString:obj];

于 2010-11-30T17:55:53.800 に答える