Maison > Questions et réponses > le corps du texte
如何检测NSString在Objective-C里是否为空?
原问题:How do I test if a string is empty in Objective C?
天蓬老师2017-04-21 11:20:49
Marc Charbonneau
Vous pouvez vérifier si [string length] == 0. Cela vérifiera s'il s'agit d'une chaîne valide mais vide (@"") et si elle est nulle. Parce que l'appel de length sans valeur renverra également 0.
Matt G
La réponse ci-dessus est correcte. Mais j'aimerais profiter de cette occasion pour présenter isEmpty résumé par Wil Shipley, qu'il a partagé sur son blog :
static inline BOOL IsEmpty(id thing) {
return thing == nil
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}
La première méthode est efficace, mais elle ne fonctionnera pas si la chaîne contient des espaces (@" "). Les espaces doivent donc être dégagés avant les tests.
Le code suivant supprime tous les espaces des deux côtés de la chaîne
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
Une bonne idée est de définir une macro pour ne pas avoir à taper cette longue chaîne de code :
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
Vous pouvez désormais utiliser :
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
Rob
L'une des meilleures solutions que j'ai vues (meilleure que celle de Matt G) est cette fonction en ligne améliorée, que j'ai trouvée dans les rapports Git Hub :
// Check if the "thing" pass'd is empty
static inline BOOL isEmpty(id thing) {
return thing == nil
|| [thing isKindOfClass:[NSNull class]]
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}
utilisateur238824
Vous feriez mieux d'utiliser cette fonction :
@implementation NSString (Empty)
- (BOOL) empty{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
chown
Une autre option consiste à utiliser isEqualToString pour vérifier s'il est égal à @"", comme ceci :
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Jim Thio
Celui-là que j'utilise :
@implementation NSObject (AdditionalMethod)
-(BOOL) isNotEmpty
{
return !(self == nil
|| [self isKindOfClass:[NSNull class]]
|| ([self respondsToSelector:@selector(length)]
&& [(NSData *)self length] == 0)
|| ([self respondsToSelector:@selector(count)]
&& [(NSArray *)self count] == 0));
};
@end
Le problème est que si self n'a aucune valeur, cette fonction ne sera jamais appelée. Il renverra false, ce qui est obligatoire.
Samir Jwarchan
Utilisez simplement l’une des conditions if else suivantes :
Méthode 1 :
<strong>if([yourString isEqualToString:@""]){
// yourString is empty.
}
else {
// yourString has some text on it.
} </strong>
Méthode 2 :
if([yourString length] == 0){
// Empty yourString
}
else {
// yourString is not empty
}