Pregunta

Me estoy haciendo un cheque en una aplicación iPhone -

int var;
if (var != nil)

Funciona, pero en X-Code esto está generando una advertencia "comparación entre el puntero y entero." ¿Cómo lo arreglo?

Yo vengo del mundo de Java, donde estoy bastante seguro de que la declaración anterior fallaría en compliation.

¿Fue útil?

Solución

Las primitivas no pueden ser nil. nil está reservado para los punteros a objetos de Objective-C. nil es técnicamente un tipo de puntero, y los punteros de mezcla y enteros será sin una conversión casi siempre resultará en una advertencia del compilador, con una excepción:. que es perfectamente aceptable para convertir implícitamente el número entero 0 a un puntero sin una conversión

Si desea distinguir entre 0 y "ningún valor", utilice el NSNumber clase :

NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil)  // compare against nil
    ;  // do one thing
else if([num intValue] == 0)  // compare against 0
    ;  // do another thing

Otros consejos

if (var) {
    ...
}

Bienvenido al maravilloso mundo de C. Cualquier valor no es igual al número entero 0 o un puntero nulo es cierto.

Pero hay un error: enteros no pueden ser nulos. Son los tipos de valor al igual que en Java.

Si usted quiere "caja" del número entero, entonces usted necesita para preguntar por su dirección:

int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0;  // This is setting "the box" to null,
                  //  NOT setting the integer value
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top