stringWithFormatは、なぜこの文はstringWithFormatでこのNSAssertをコンパイルできないのはなぜですか?
NSAssert(YES, [NSString stringWithFormat:@"%@",@"test if compiles"]);
とき
NSAssert(YES, @"test if compiles");
コンパイルをコンパイルしていない文字列を返す必要がありますか?
stringWithFormatは、なぜこの文はstringWithFormatでこのNSAssertをコンパイルできないのはなぜですか?
NSAssert(YES, [NSString stringWithFormat:@"%@",@"test if compiles"]);
とき
NSAssert(YES, @"test if compiles");
コンパイルをコンパイルしていない文字列を返す必要がありますか?
としてこれを使用します。
NSAssert(YES, ([NSString stringWithFormat:@"%@",@"test if compiles"])); // Pass it in brackets()
は、それはあなたのお役に立てば幸いです。
実際にstringWithFormat
を使用する必要はありません。 NSAssert
は、フォーマット文字列と可変引数をフォーマットするために既にを渡すことを期待しています。
NSAssert(YES, "%@", @"test if compiles");
あるいは、より現実的な例:
:NSAssert(i > 0, @"i was negative: %d", i);
次のように定義され、NSAssert
is a macroので、あなたの問題の原因はあなたの例を考えると、あなたは、これはちょうど同様に動作見つけることができます
#define NSAssert(condition, desc, ...)
のパラメータリストとマクロ自体のパラメータリストのあいまいさがあるため、コンパイラは混乱します。 Nishantが指摘しているように、本当にここでstringWithFormat
を使用したい場合は、混乱を避けるために角括弧を追加することができます。
すばらしい答え!フレームワークを活用する方が常に良いです。 –
stringWithFormatは、文字列をその形式のパラメータとして再度使用することは冗長です。私は正確には分かりませんが、アップルはこのようなコードのコンパイルレベルチェックを行っている可能性があります。アサーションがコンパイルされなかった場合、どのようなエラー/メッセージが表示されますか? – CodenameLambda1
異質の閉じ括弧 – hakonbogen