1

次のコードは、NSLog で必要な結果を取得しますが、これを行うためのより簡単な方法が必要ですか? 「フォーマット文字列は文字列リテラルではありません」というエラーも表示されますが、それでも問題なくビルドできます。

NSString *levelstring1 = @"Level ";
NSString *levelstring2 = [NSString stringWithFormat:@"%d", levelscore];
NSString *levelstring3 = @" (";
NSString *levelstring4 = [NSString stringWithFormat:@"%d", xpscore];
NSString *levelstring5 = @"/";
NSString *levelstring6 = [NSString stringWithFormat:@"%d", (levelscore*(levelscore+1)*100)];
NSString *levelstring7 = @")";

NSString *levelstringfinal = [[[[[[levelstring1 stringByAppendingFormat:levelstring2]stringByAppendingFormat:levelstring3]stringByAppendingFormat:levelstring4]stringByAppendingFormat:levelstring5]stringByAppendingFormat:levelstring6]stringByAppendingFormat:levelstring7];

NSLog(@"Level is %@",levelstringfinal);

最終結果は次のようになります: レベル 1 (50/100)。

4

1 に答える 1

3

それらを次のように組み合わせることができます。

NSString *levelstringfinal = [NSString stringWithFormat:@"Level %d (%d/%d)", levelscore, xpscore, (levelscore*(levelscore+1)*100)];

警告が表示されるのは、コンパイラが変数の内容をチェックできないためです。一方、文字列リテラルでは、ある程度の一貫性のためにプレースホルダーと変数を一致させることができます。

(文字列をバラバラに構築しなければならなかったとしてstringByAppendingStringstringByAppendingFormat、それらはもはやフォーマット指定子ではないため、最後の行を使用する方が適切です。)

于 2012-12-03T14:30:05.743 に答える