Error de expresión esperado para la declaración if else [cerrado]

Xcode se queja de "Expresión esperada requerida" por segundo else if declaración en mi código. Intenté usar paréntesis del código que había visto aquí, pero eso no funcionó y no estoy seguro de qué expresión quiere ahora. Funciona bien hasta que agregue un segundo else if Me doy cuenta de que esto es probablemente algo básico del objetivo C, pero nunca he hecho una declaración if para más de dos elementos, estoy un poco atascado

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{


if ([text1 isFirstResponder])return arrStatus.count;

else


   if ([text2 isFirstResponder]);return arrStatus2.count;

   else ///<<<<< wants an expected expression here


       if ([text3 isFirstResponder]);return arrStatus2.count;

 }

preguntado el 31 de julio de 12 a las 13:07

3 Respuestas

Solo tiene un punto y coma extra en su segundo if declaración. Debería ser: if ([text2 isFirstResponder]) return arrStatus2.count;

PD. Estás cometiendo el mismo error el 3 if también... Realmente deberías considerar el uso de corchetes incluso para las frases de una sola línea.

Respondido 31 Jul 12, 13:07

Gracias por responder, +1, Re su sugerencia de corchetes, ¿es algo funcional? ¿O simplemente para hacer que el código sea más limpio de leer? - JSA986

Mi sugerencia se basa en el hecho de que muchas veces comienzas con una declaración if simple y luego solo quieres expandirla, por lo que agregas las llaves. Además, en mi opinión, ayuda a la legibilidad cuando tienes muchas declaraciones. Aparte de eso, no, las frases ingeniosas son perfectamente válidas. - Aladino

Tiene puntos y comas falsos después de algunos de los if declaraciones:

if ([text2 isFirstResponder]);   <--- here

Aparte de eso, su código está mal sangrado y debe dejar de poner declaraciones en la misma línea que el if/else if líneas:

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if ([text1 isFirstResponder])
        return arrStatus.count;
    else if ([text2 isFirstResponder])
        return arrStatus2.count;
    else if ([text3 isFirstResponder])
        return arrStatus2.count;
 }

Respondido 31 Jul 12, 13:07

Gracias, anotado para la próxima. ¡Eso me impidió tirar mi mac al suelo con frustración! - JSA986

@ JSA986 ¡sí, no hagas eso! Demasiado caro para reemplazar... - troyano

Se requiere su función/método para devolver algo, en este caso, un NSInteger. Sin embargo, existe una posible situación en su código en la que no hay una declaración de devolución. En su último else, si la declaración if no es correcta, no se devolverá nada.

if ([text1 isFirstResponder]) {
   return arrStatus.count;
} else {
   if ([text2 isFirstResponder]) {
       return arrStatus2.count;
   } else {
        if ([text3 isFirstResponder]) {
           return arrStatus2.count;
        }
        // nothing will be returned here
        // you can return nil or actual 0
        // return nil;
        // return 0;
   }

}

Respondido 31 Jul 12, 13:07

Gracias por señalarlo, eso ha detenido otro posible error +1 para usted, he devuelto cero y recibo una advertencia amarilla: incompatible pointer to interger conversion returning void from a function with result type NSInterger (AKA int) - JSA986

Supongo que este valor normalmente nunca debería devolverse, ya que siempre será 1 de los 3 casos. Entonces sugiero simplemente devolver un NSInter con valor que no hará que el programa cause advertencias o se bloquee, ya que en realidad no entiendo qué se supone que debe hacer este código. - pieter gunst

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.