La plupart des exemples que j'ai trouvés sur le net écrivent ceci:
if(x != nil)
// ...
Y a-t-il des problèmes avec cela?
if(x)
// ...
J'ai essayé les deux dans un programme simple et je n'ai trouvé aucune différence.
Dans Objective-C, nil
est défini comme une valeur appelée __DARWIN_NULL
, Qui s'évalue essentiellement à 0
Ou false
dans les instructions if. Par conséquent, écrire if (x == nil)
est identique à écrire if (!x)
et écrire if (x != nil)
est égal à if (x)
(puisque comparé à false
crée une négation et la comparaison avec true
conserve la même condition).
Vous pouvez écrire votre code de toute façon, et cela dépend vraiment de ce que vous pensez être le plus lisible. Je trouve que if (x)
a plus de sens, mais cela dépend de votre style.
C'est comme comparer if (someCondition == true)
et if (someCondition)
.
Tout dépend de vous, et de qui va lire le code.
Edit: Comme Yuji le mentionne correctement, puisque Objective-C est un surensemble de C, toute condition qui évalue à une valeur autre que 0 est considérée comme vraie, et donc, si someCondition
dans l'exemple ci-dessus devait être évalué à une valeur entière de, disons -1, la comparer à true
entraînerait false
, et l'instruction if ne serait pas évaluée. Quelque chose à savoir.
Tous les deux
if (x != nil)
et
if ( x )
sont équivalents, alors choisissez la variante qui, à votre avis, rend votre code plus lisible pour vous (et les autres qui liront et prendront en charge votre code)
Les deux sont les mêmes et c'est une question de style et cela se résume à savoir si vous préférez:
si quelque chose) { ... }
versus
J'ai toujours trouvé le n ° 1 plus clair, mais le n ° 2 est largement utilisé dans la documentation et donc le domaine, il est donc préférable de connaître les deux formes et de s'adapter à ce qu'un projet utilise et d'être stylistiquement cohérent.
Le moyen le plus sûr et le plus sûr de vérifier zéro est
Créez une méthode commune et ajoutez tous ces null:
+ (NSString *)trimWhiteSpaceAndNewLine:(NSString *)string {
NSString *stringSource = [NSString stringWithFormat:@"%@",string];
if ([stringSource isEqualToString:@"(null)"]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isEqualToString:@"<null>"]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isEqualToString:@"<nil>"]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isKindOfClass:[NSNull class]]) {
stringSource = @"";
return stringSource;
}
if ([stringSource isEqualToString:@""]) {
stringSource = @"";
return stringSource;
}
if (stringSource == nil) {
stringSource = @"";
return stringSource;
}
NSString *stringFinal = [stringSource stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return stringFinal;
}
Et vérifie
NSString *strUuid = [Common trimWhiteSpaceAndNewLine:[dict valueForKeyPath:@"detail.uuid"]];
if (![strUuid isEqualToString:@""]) {
// do your stuff
}