Est nul et (NSString *)[NSNull null] équivalent à vérifier vide NSString objet
J'ai un NSString
objet,
NSString *aString;
sont donc les deux versions suivantes équivalent?
Version 1 :
if ( (NSString *)[NSNull null] == aString )
{
//Logic handling
}
Version 2 :
if ( nil == aString )
{
//Logic handling
}
De Référence Des Postes
Mise À Jour Des Résultats
Mon simple résultat du test montre que les deux versions ont des comportements différents:
-
Quand
aString
est initialisé, puis assigné ànil
:false
pour l'expression dans la version 1,true
pour l'expression dans la version 2. -
Quand
aString
est initialisé avec la valeur de@""
.false
pour l'expression dans la version 1,false
pour l'expression dans la version 2.
Il est donc clair que les deux versions ne sont pas identiques dans leur comportement.
Le code de test:
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");
}
Sortie de la Console:
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
Mise à jour - Que Dois-je Dire "chaîne Vide ("**
Maintenant, j'ai fait plus clair que c'est différent pour un NSString
objet à nil
et, pour être valide initialisé exemple la tenue d'un vide de la chaîne de valeur de @""
. Ce que j'ai vraiment besoin dans ce post, c'est que la façon de tester si mon NSString
objet est initialisé, qui est, si aString
est nil
. Je veux savoir si il y a une différence pour les deux versions de test de code.
@Sulthan, donc je ne peux pas remplacer
if ( aString == (NSString *)[NSNull null] )
avec if ( aString == nil )
?Pas de. Qu'essayez-vous de faire?
c'est l'équivalent, mais vous bande de moins de code 🙂
Vous devez analyser dictioaries intelligemment. L'utilisation d'une catégorie sur
NSDictionary
pour convertir NSNull
à nil
automatiquement.
OriginalL'auteur George | 2013-10-30
Vous devez vous connecter pour publier un commentaire.
[NSNull null]
etnil
ne sont pas équivalentes.[NSNull null]
est censé représenter le concept de la valeur NULL (comme en l'absence d'objet) dans les cas oùnil
ne peut pas être utilisé, par exemple dans unNSArray
(comme vous ne pouvez insérer des objets en eux).[NSNull null]
est un objet (toujours le même objet), tandis quenil
est un pointeur vers 0.NSHipster a une belle discussion ici. Il dit:
Si vous avez:
alors quelque chose ne va pas,
aString
doit pointer vers uneNSString
objet (ou sous-classe), ounil
. Mais pas[NSNull null]
qui est un objet d'une classe différente, vous ne devriez pas jeté de l'un à l'autre.EDIT:
Donnés dans les commentaires, vous indiquez que vous souhaitez vérifier si la chaîne est vide (comme dans
@""
), ce qui est différent. Voir ce question. Une chaîne vide est uneNSString
objet, il n'est pasnil
et il n'est pas[NSNull null]
.NSString
objet ànil
et pour@""
. Donc ce que j'ai vraiment besoin dans le post, c'est que la façon de tester si monNSString
objet est initialisé, qui est, siaString
estnil
.si (aString == nil) {//la chaîne n'est pas initialisée}
si (aString != nil) {//la chaîne est initialisée}
Merci @jbat100, clair maintenant!
"alors quelque chose ne va pas" Le "quelque chose de mal" pourrait être la paresse. Parfois, les gens mettent un objet incertain classe dans la variable et les vérifier plus tard, pour éviter de devoir introduire une autre variable.
OriginalL'auteur jbat100
ils ne sont pas les mêmes, la
NSNull
est un objet valide (héritée deNSObject
) en face d'unnil
pointeur qui pointe vers rien.c'est comment vous pouvez vérifier, si un objet est un
NSNull
objet, mais de la première version est également correct.== [NSNull null]
est parfaitement valide, trop.yep, j'ai déjà corrigé, merci!
OriginalL'auteur holex
nil
ne signifie rien.[NSNull null]
est un objet, instance de la classeNSNull
==
signifie l'égalitésomething equals to something else
n'est pas le même quesomething is equal to nothing
OriginalL'auteur Sulthan
[NSNull null]
retourne l'instance du singleton deNSNull
.aString == [NSNull null]
compare deux pointeurs. Aussi longtemps queaString
ne pointe pas vers leNSNull
singleton, ils ne seront jamais égaux.OriginalL'auteur Sebastian
Si vous voulez faire correspondre une chaîne à zéro:
1. si(aString.longueur==0)
{
}
2.si(sString isEqualToString:@"")
{
}
3.si(aString!=néant)
{
} else
{
//faire vos trucs ici
}
OriginalL'auteur Muruganandham K
}
OriginalL'auteur Mannam Brahmam