2012-01-23 6 views
9

Parece que tengo problemas para crear nuevas variables locales dentro de una sentencia switch. Pensé que era algo en los encabezados de mi clase, pero incluso recibí errores al intentar asignar un nuevo NSObject. Aquí está mi sintaxis:Cambie las declaraciones y la asignación de variable de instancia en Objective-C

-(NSArray *)charactersFromChapter:(NSInteger)number { 
    NSObject *noError = [[NSObject alloc] init]; 
    //line above does not cause error 
    NSArray *characters; 
    switch (number) { 
     case 1: 
      NSObject *obj = [[NSObject alloc] init]; 
      //error happens in line above (Expected expression) 
      characters = [NSArray arrayWithObject:obj]; 
      break; 
     case 2: 

      break; 
     case 3: 

      break; 
    } 
    return characters; 
} 
+2

Nota, esos no son '' Ivars. Un ivar es una variable de instancia, algo que declararías en el archivo de encabezado. Estas son simplemente variables locales. Seguramente sería bueno si el comité de estándares de C permitiera el estilo que has intentado. –

+0

gracias por la aclaración, corregiré la pregunta – Justin

+1

@GrahamPerks: Ivars ya no necesita estar en el encabezado; pueden ser inmediatamente después de la línea '@ implementation'. –

Respuesta

32

En una declaración de cambio, no puede inicializar variables sin establecer primero un alcance, para solucionarlo, haga algo como esto:

switch (some_expression) { 
    case case_1: 
    { // notice the brackets 
     id some_obj = [MyObj new]; 
     break; 
    } 
    default: 
     break; 
} 
+0

sí, eso lo solucionó. Gracias por la pronta respuesta. aceptará respuesta después de 10 minutos cuando esté permitido – Justin

+0

Gracias. Ha funcionado :) –

5

Es necesario o bien declarar "obj" fuera de la instrucción switch, o utilizar llaves de la siguiente manera:

switch (number) { 
    case 1: { 
     NSObject *obj = [[NSObject alloc] init]; 
     //error happens in line above (Expected expression) 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
    } 

Ver aquí para obtener más información: Why can't variables be declared in a switch statement?

+1

gracias por el enlace, tengo algunos estudios para hacer – Justin

1

En la caja del conmutador solo puede usar expresiones.

Puede solucionar este problema mediante el uso de algo como esto:

case 1: 
{ 
     NSObject *obj = [[NSObject alloc] init]; 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
} 
Cuestiones relacionadas