Come faccio a testare se un primitivo in Objective-C è pari a zero?
-
23-08-2019 - |
Domanda
che sto facendo un controllo in un'applicazione iPhone -
int var;
if (var != nil)
Funziona, ma in X-Code questo sta generando un avvertimento "confronto tra puntatore e intero." Come lo aggiusto?
Io vengo dal mondo Java, dove sono abbastanza sicuro che la dichiarazione di cui sopra non riuscirebbe a compliation.
Soluzione
Le primitive non possono essere nil
. nil
è riservato ai puntatori a oggetti Objective-C. nil
è tecnicamente un tipo di puntatore, e miscelazione puntatori e interi sarà senza un cast sarà quasi sempre risultare in un avviso del compilatore, con una sola eccezione:. è perfettamente ok per convertire implicitamente il numero intero da 0 a un puntatore senza un cast
Se si vuole distinguere tra 0 e "nessun valore", utilizzare il NSNumber
classe :
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
Altri suggerimenti
if (var) {
...
}
Benvenuti nel meraviglioso mondo di C. Qualsiasi valore non uguale al numero intero 0 o un puntatore nullo è vero.
Ma si dispone di un bug: int non può essere NULL. Sono tipi di valore, proprio come in Java.
Se si vuole "scatola" il numero intero, allora avete bisogno di chiedere per il suo indirizzo:
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