Sie müssen überhaupt nicht stringWithFormat
verwenden. NSAssert
erwartet bereits Sie eine Formatzeichenfolge und variable Argumente für die Formatierung übergeben. Gegeben Ihrem Beispiel, finden Sie diese genauso gut funktioniert:
NSAssert(YES, "%@", @"test if compiles");
Oder ein realistischeres Beispiel:
NSAssert(i > 0, @"i was negative: %d", i);
Der Grund für Ihr Problem ist, weil NSAssert
is a macro, definiert wie folgt aus:
#define NSAssert(condition, desc, ...)
Und der Compiler ist verwirrt, weil es zwischen der Parameterliste für stringWithFormat
und der des Makros Mehrdeutigkeit gibt. Wie Nishant hervorhebt, können Sie Klammern hinzufügen, um Verwirrung zu vermeiden, wenn Sie wirklich stringWithFormat
hier verwenden möchten.
StringWithFormat mit nur einem String wieder als Parameter in seinem Format ist redundant. Ich weiß es nicht genau, aber ich glaube, dass Apple eine Compiler-Level-Prüfung für solche Codes durchgeführt haben könnte. Welche Fehlermeldung erhalten Sie, wenn die Assert nicht kompiliert wird? – CodenameLambda1
Extraneous schließende Klammer – hakonbogen