Question

Je fais un chèque dans une application iPhone -

int var;
if (var != nil)

Il fonctionne, mais dans le code X cela génère un avertissement « comparaison entre pointeur et entier. » Comment je le répare?

Je viens du monde Java, où je suis assez sûr que la déclaration ci-dessus échouerait sur compliation.

Était-ce utile?

La solution

Primitives ne peuvent pas être nil. nil est réservé pour des pointeurs vers des objets Objective-C. nil est techniquement un type de pointeur, et le mélange des pointeurs et entiers sera sans fonte entraînera presque toujours dans un avertissement du compilateur, à une exception près:. il est parfaitement correct de convertir implicitement l'entier 0 à un pointeur sans plâtre

Si vous voulez faire la distinction entre 0 et « aucune valeur », utilisez la touche 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

Autres conseils

if (var) {
    ...
}

Bienvenue dans le monde merveilleux de C. Toute valeur non égale à l'entier 0 ou un pointeur NULL est vrai.

Mais vous avez un bug: ints ne peut pas être nulle. Ils sont les types de valeur comme en Java.

Si vous voulez « boîte » l'entier, alors vous devez demander son adresse:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top