¿Cómo puedo probar si una primitiva en Objective-C es nula?
-
23-08-2019 - |
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.
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