In realtà non è necessario utilizzare stringWithFormat
. NSAssert
si aspetta già per passare una stringa di formato e argomenti variabili per la formattazione. Dato il tuo esempio, troverete questo funziona altrettanto bene:
NSAssert(YES, "%@", @"test if compiles");
Oppure, un esempio più realistico:
NSAssert(i > 0, @"i was negative: %d", i);
Il motivo per il vostro problema è dovuto al fatto NSAssert
is a macro, definita in questo modo:
#define NSAssert(condition, desc, ...)
E il compilatore è confuso perché c'è un'ambiguità tra l'elenco dei parametri per stringWithFormat
e quello della macro stessa. Come fa notare Nishant, puoi aggiungere parentesi per evitare la confusione se vuoi davvero usare stringWithFormat
qui.
fonte
2014-03-19 18:18:19
stringWithFormat con solo una stringa nuovamente come un parametro nel suo formato è ridondante. Non so esattamente, ma credo che Apple avrebbe potuto fare qualche controllo del livello del compilatore su tali codici. Quale errore/messaggio si ottiene quando l'asserzione non viene compilata? – CodenameLambda1
Dispositivo di chiusura estraibile – hakonbogen