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
Update - Test-Ergebnis
Meine einfache test-Ergebnis zeigt, dass die beiden oben genannten Versionen haben unterschiedliche Verhaltensweisen:
-
Wenn
aString
initialisiert und dann jeweils mitnil
:false
zum Ausdruck, die in version 1,true
für die Meinungsfreiheit in der version 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] )
mitif ( 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 )
durchif (!aString)
- Die beste Kontrolle für die leere Zeichenkette
aString.length == 0
- Zu @Sultan, Hat
[aString length]
auch Erträge0
auch wennaString
nicht initialisiert? Zum Beispiel, indem Sie diese Initialisierung code:NSString *aString = [aNSMutableDictionaryVariable objectForKey:@"stringKey"];
- und rechts-nach dieser Initialisierung, da geht der code überprüfenaString
mitif (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 konvertierenNSNull
zunil
automatisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
[NSNull null]
undnil
sind nicht gleichwertig.[NSNull null]
soll das Konzept der NULL (wie in kein Objekt ist) in Fällen, in denennil
kann nicht verwendet werden, zum Beispiel in einemNSArray
(wie können Sie nur Objekte einfügen, die in Ihnen).[NSNull null]
ist ein Objekt (immer das gleiche Objekt), währendnil
ist ein Zeiger auf 0.NSHipster hat eine nette Diskussion hier. Er sagt:
Wenn Sie haben:
dann etwas falsch,
aString
zeigen sollte, zu einerNSString
Objekt (oder Unterklasse), odernil
. Aber nicht[NSNull null]
was ist ein Objekt einer anderen Klasse, sollte man nicht cast von einem zum anderen.EDIT:
In die Kommentare bestätigen Sie, dass Sie möchten, um zu überprüfen, ob der string leer ist (wie in
@""
), ist das anders. Sehen Sie diese Frage. Ein leerer string ist eineNSString
Objekt, es ist nichtnil
und es ist nicht[NSNull null]
.NSString
Objektnil
und für es zu haben@""
. Also, was brauche ich wirklich in der post ist, dass, wie um zu testen, ob meineNSString
- Objekt erfolgreich initialisiert, das heißt, wennaString
istnil
.string.length > 0
?Sie sind nicht die gleichen, die
NSNull
ist ein gültiges Objekt (geerbt vonNSObject
) gegenüber einemnil
Zeiger, der auf nichts.ist, wie Sie überprüfen können, ob ein Objekt eine
NSNull
Objekt, aber man erste version ist auch okay.== [NSNull null]
ist durchaus gültig, auch.nil
nichts bedeutet.[NSNull null]
ist ein Objekt, eine Instanz der KlasseNSNull
==
bedeutet Gleichstellungsomething equals to something else
ist nicht das gleiche wiesomething is equal to nothing
[NSNull null]
liefert die singleton-Instanz vonNSNull
.aString == [NSNull null]
vergleicht zwei Zeiger. SolangeaString
nicht auf denNSNull
singleton, Sie wird nie gleich sein.Wenn Sie wollen, um einen string auf nil:
1. if(aString.Länge==0)
{
}
2.wenn(szeichenkette isEqualToString:@"")
{
}
3.if(aString!=nil)
{
} else
{
//Mach dein Zeug hier
}
}