Corte al grano, he recreado mi problema, ya que se explica por sí mismo.
esto cumple sin error:
switch (n) {
case 1:
NSLog(@"");
NSString *aStr;
break;
default:
break;
}
esto se compila con error y solo falta el NSLog ():
switch (n) {
case 1:
NSString *aStr;
break;
default:
break;
}
arroja un error al compilar " Expresión esperada antes de 'NSString' "
¿Me estoy perdiendo de algo?
Respuestas:
En C normal, tendría que encerrar esto entre corchetes en ambos casos. Sospecho que esto puede solucionar su problema:
case 1: { NSLog(@""); NSString *aStr; break; }
Consulte esta pregunta SO para obtener más información.
Otra forma de solucionar este problema es poner una declaración entre la etiqueta del caso y la primera declaración como lo hizo en su ejemplo de trabajo anterior. Vea los comentarios y la respuesta de Quinn Taylor para obtener más información.
fuente
;
) después de lacase
etiqueta también funciona. La razón del error y la razón por la que ambas soluciones funcionan es que una etiqueta, incluida unacase
etiqueta, solo puede preceder a una declaración. Las declaraciones no son declaraciones en C (C99 §6.7, §6.8, §6.8.2) y Objective-C, por lo que no puede poner una etiqueta inmediatamente antes de una declaración. Por lo tanto, las soluciones: coloque una declaración (como;
oNSLog(@"");
) entre la etiqueta y la declaración, o envuelva la declaración dentro de una declaración compuesta (los corchetes) después de la etiqueta.No puede declarar una variable como la primera declaración
case
entre corchetes y en muchos otros contextos en lenguajes basados en C. Consulte Declaración de variables dentro de una declaración de cambio para obtener más detalles.fuente
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:
fuente