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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top