Auf den Punkt gebracht Ich habe mein Problem neu erstellt, da es ziemlich selbsterklärend ist.
dies entspricht fehlerfrei:
switch (n) {
case 1:
NSLog(@"");
NSString *aStr;
break;
default:
break;
}
Dies wird mit Fehler kompiliert und es fehlt nur das NSLog ():
switch (n) {
case 1:
NSString *aStr;
break;
default:
break;
}
Beim Kompilieren wird ein Fehler ausgelöst: " Erwarteter Ausdruck vor 'NSString' "
Vermisse ich hier etwas?
Antworten:
In normalem C müssten Sie dies in beiden Fällen in Klammern setzen. Ich vermute, dies könnte Ihr Problem beheben:
case 1: { NSLog(@""); NSString *aStr; break; }
Weitere Informationen finden Sie in dieser SO-Frage .
Eine andere Möglichkeit, dieses Problem zu umgehen, besteht darin, eine Anweisung zwischen das Falletikett und die erste Deklaration zu setzen, wie Sie es in Ihrem obigen Arbeitsbeispiel getan haben. Weitere Informationen finden Sie in den Kommentaren und in der Antwort von Quinn Taylor.
quelle
;
) nach demcase
Beschriften funktioniert ebenfalls. Der Grund für den Fehler und der Grund, warum beide Lösungen funktionieren, ist, dass ein Etikett, einschließlich einescase
Etiketts, nur einer Aussage vorangehen kann. Erklärungen sind keine Aussagen in C (C99 §6.7, §6.8, §6.8.2) und Objective-C, daher können Sie eine Erklärung nicht unmittelbar vor einer Erklärung anbringen. Daher die Lösungen: Setzen Sie entweder eine Anweisung (wie;
oderNSLog(@"");
) zwischen das Label und die Deklaration oder schließen Sie die Deklaration in eine zusammengesetzte Anweisung (die Klammern) ein, die dem Label folgt.Sie können eine Variable nicht als erste Anweisung in a
case
ohne Klammern und in vielen anderen Kontexten in C-basierten Sprachen deklarieren . Weitere Informationen finden Sie unter Deklarieren von Variablen in einer switch-Anweisung .quelle
case 0: { Loading my nib file; break; } case 1: { Loading another nib file; break; } Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example:
quelle