Nil, und der (NSString *)[NSNull null] entspricht in der überprüfung leer NSString-Objekt

Ich habe eine NSString Objekt,

NSString *aString;

dann sind die beiden folgenden Versionen gleichwertig?

Version 1 :

if ( (NSString *)[NSNull null] == aString )
{
   //Logic handling
}

Version 2 :

if ( nil == aString )
{
   //Logic handling
}

Verweis Beiträge

  1. Unterschied zwischen null -, Null und null

  2. Wie zu erkennen, wenn NSString null ist?

  3. Apple NSNull Klasse Referenz

  4. Wie kann ich testen, ob ein string leer ist in Objective C?

Update - Test-Ergebnis

Meine einfache test-Ergebnis zeigt, dass die beiden oben genannten Versionen haben unterschiedliche Verhaltensweisen:

  1. Wenn aString initialisiert und dann jeweils mit nil:

    false zum Ausdruck, die in version 1,

    true für die Meinungsfreiheit in der version 2.

  2. Wenn aString ist initialisiert mit dem Wert der @"".

    false zum Ausdruck, die in version 1,

    false für die Meinungsfreiheit in der version 2.

So ist es klar, dass die beiden Versionen nicht deckungsgleich sind, in Ihrem Verhalten.

Den test-code:

NSString *aString = nil;
NSString *bString = [NSString stringWithFormat:@""];

if ((NSString *)[NSNull null] == aString) {
    NSLog(@"a1 - true");
} else {
    NSLog(@"a1 - false");
}

if (nil == aString) {
    NSLog(@"a2 - true");
} else {
    NSLog(@"a2 - false");
}

if ((NSString *)[NSNull null] == bString) {
    NSLog(@"b1 - true");
} else {
    NSLog(@"b1 - false");
}

if (nil == bString) {
    NSLog(@"b2 - true");
} else {
    NSLog(@"b2 - false");
}

Ausgabe der Konsole:

2013-10-31 00:56:48.132 emptyproject[31104:70b] a1 - false
2013-10-31 00:56:48.133 emptyproject[31104:70b] a2 - true
2013-10-31 00:56:48.133 emptyproject[31104:70b] b1 - false
2013-10-31 00:56:48.133 emptyproject[31104:70b] b2 - false

Update - Was Meine ich "Leere Zeichenfolge"**

Nun ich habe gemacht es deutlich, dass es anders für ein NSString Objekt nil und für die es eine gültige Instanz initialisiert halten Sie eine leere Zeichenfolge-Wert des @"". Was ich wirklich brauche, in diesem post ist, dass, wie um zu testen, ob meine NSString - Objekt erfolgreich initialisiert, das heißt, wenn aString ist nil. Ich möchte wissen, ob es irgendeinen Unterschied für die beiden oben genannten Versionen von test-code.

  • Wie könnte man diese äquivalent?
  • Zu @Sultan, so kann ich nicht ersetzen if ( aString == (NSString *)[NSNull null] ) mit if ( aString == nil )?
  • Nein. Was versuchen Sie zu tun?
  • Zu @Sultan, der Versucht zu überprüfen, wird eine leere Zeichenfolge ist, wird @"".
  • Sie können auch ersetzen if ( aString == nil ) durch if (!aString)
  • Die beste Kontrolle für die leere Zeichenkette aString.length == 0
  • Zu @Sultan, Hat [aString length] auch Erträge 0 auch wenn aString nicht initialisiert? Zum Beispiel, indem Sie diese Initialisierung code: NSString *aString = [aNSMutableDictionaryVariable objectForKey:@"stringKey"]; - und rechts-nach dieser Initialisierung, da geht der code überprüfen aString mit if (0 == [aString length]){}
  • Zu @JordanMontel, meinst du aString == nil ist falsch, aber !aString ist die richtige? Oder meinst du, Sie sind gleichwertig, aber letzteres ist besser, da es einfacher?
  • es ist gleichwertig, aber Sie Band weniger code 🙂
  • Sie sollte analysieren dictioaries schlau. Verwenden Sie ein Kategorie NSDictionary zu konvertieren NSNull zu nil automatisch.

InformationsquelleAutor George | 2013-10-30
Schreibe einen Kommentar