2011-12-22 20 views
10

Duplicar posible:
Declaring variables inside a switch statementObjective-C Interruptor Declaración

estoy teniendo dificultades para conseguir XCode que me permita escribir una sentencia switch en particular en Objective-C. Estoy famiiar con la sintaxis y podría reescribirla como si/else bloqueara, pero tengo curiosidad.

switch (textField.tag) { 
     case kComment: 
      ingredient.comment = textField.text; 
      break; 
     case kQuantity: 
      NSLog(@""); // removing this line causes a compiler error   
      NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; 
      fmt.generatesDecimalNumbers = true; 
      NSNumber *quantity = [fmt numberFromString:textField.text]; 
      [fmt release]; 
      ingredient.quantity = quantity; 
      break; 
    } 

no puedo ver el error de sintaxis, es como si tengo que engañar al compilador para que permita esto.

Respuesta

15

No se puede agregar declaración de la variable después de la etiqueta. Puede agregar un punto y coma en lugar de llamar al NSLog(), por ejemplo. O declarar la variable antes del cambio. O agregue otro {}.

+0

La forma más fácil es poner punto y coma después entre la caja y la declaración. – Ariel

+0

Sí, es la menor cantidad de pulsaciones de teclas, pero dependiendo del contexto, la solución más estéticamente agradable puede diferir :) –

+0

Es por eso que he votado su respuesta :) – Ariel

-2

Elimina la parte de declaración de variable dentro de la instrucción switch.

En la sentencia switch no puede crear ninguna variable en Objective-C.

NSNumberFormatter *fmt = nil; 
NSNumber *quantity = nil; 
switch (textField.tag) { 
     case kComment: 
      ingredient.comment = textField.text; 
      break; 
     case kQuantity: 
      fmt = [[NSNumberFormatter alloc] init]; 
      fmt.generatesDecimalNumbers = true; 
      quantity = [fmt numberFromString:textField.text]; 
      [fmt release]; 
      ingredient.quantity = quantity; 
      break; 
    } 

Prueba esto ...

+1

Parece que puede - y no veo por qué no. en la segunda línea en una instrucción switch, la declaración funciona. Incluso si la primera línea es solo ';' – Jhong

Cuestiones relacionadas