In Objective-C nil
wird ein Wert definiert __DARWIN_NULL
, der aufgerufen wird und im Wesentlichen nach 0
oder false
in if-Anweisungen ausgewertet wird . Daher ist Schreiben
if (x == nil)
dasselbe wie Schreiben if (!x)
und Schreiben if (x != nil)
ist gleich if (x)
(da das Vergleichen mit false
eine Negation erzeugt und das Vergleichen mit true
den Zustand gleich hält).
Sie können Ihren Code so oder so schreiben, und es hängt wirklich davon ab, welcher Code Ihrer Meinung nach besser lesbar ist. Ich finde if (x)
es sinnvoller, aber es hängt von Ihrem Stil ab.
Es ist wie der Vergleich im if (someCondition == true)
Vergleich if (someCondition)
.
Es hängt alles von Ihnen ab und davon, wer den Code lesen wird.
Bearbeiten: Wie Yuji richtig erwähnt, wird, da Objective-C eine Obermenge von C ist, jede Bedingung, die mit einem anderen Wert als 0 ausgewertet wird, als wahr angesehen. Wenn someCondition
im obigen Beispiel ein ganzzahliger Wert von Sagen wir -1, ein Vergleich mit true
würde dazu führen false
, und die if-Anweisung würde nicht ausgewertet. Etwas zu beachten.
if(someCondition==true)
davon abgeraten wird, da in C-abgeleiteten Sprachen jeder andere Wert als 0 im Prinzip als boolescher wahrer Wert angesehen werden kann, aber aus historischen Gründen, wenn definiertsomeCondition
ist-1
und dann als falsch ausgewertet wird.true
1
someCondition==true
someCondition
zu einem Booleschen Wert führt, aber das ist eine wichtige Warnung.nil
ist im Wesentlichen gleich 0, daher werden diese Bedingungen zuif (0)
und ausgewertetif (0 != 0)
, die beide falsch sind.Beide
if (x != nil)
und
if ( x )
sind gleichwertig, wählen Sie also die Variante aus, die Ihrer Meinung nach Ihren Code für Sie (und andere, die Ihren Code lesen und unterstützen) besser lesbar macht.
quelle
Beide sind gleich und dies ist eine Stilfrage und es kommt darauf an, ob Sie es vorziehen:
Falls etwas) { ... }
gegen
Ich habe immer festgestellt, dass Nummer 1 klarer ist, aber Nummer 2 wird häufig in der Dokumentation und damit im Feld verwendet. Daher ist es besser, beide Formen zu kennen und sich an die Verwendung eines Projekts anzupassen und stilistisch konsistent zu sein.
quelle
Der beste und sicherste Weg, um Null zu überprüfen, besteht darin,
eine gemeinsame Methode zu erstellen und alle diese Nullen hinzuzufügen :
+ (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; }
Und prüfe
NSString *strUuid = [Common trimWhiteSpaceAndNewLine:[dict valueForKeyPath:@"detail.uuid"]]; if (![strUuid isEqualToString:@""]) { // do your stuff }
quelle