Question Comment tester si une chaîne est vide dans Objective C?


Comment puis-je tester si un NSString est vide dans l'objectif C?


614
2018-05-22 18:12


origine


Réponses:


Vous pouvez vérifier si [string length] == 0. Cela vérifiera si c'est une chaîne valide mais vide (@ "") ainsi que si elle est nulle, depuis l'appel length sur zéro reviendra également 0.


1089
2018-05-22 18:14



La réponse de Marc est correcte. Mais je profite de l'occasion pour inclure un pointeur vers généralisé Wil Shipley isEmpty, 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);
}

126
2018-05-22 18:33



La première approche est valide, mais ne fonctionne pas si votre chaîne contient des espaces (@" "). Vous devez donc effacer ces espaces blancs avant de le tester.

Ce code efface tous les espaces vides des deux côtés de la chaîne:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

Une bonne idée est de créer une macro, vous n'avez donc pas besoin de taper cette ligne de monstre:

#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]

Maintenant vous pouvez utiliser:

NSString *emptyString = @"   ";

if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");

92
2017-10-27 13:37



L'une des meilleures solutions que j'ai jamais vues (mieux que celle de Matt G) est cette fonction inline améliorée que j'ai récupérée sur un repo de Git Hub (celle de Wil Shipley, mais je ne trouve pas le lien):

// 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);
}

30
2017-09-09 09:54



Vous devriez mieux utiliser cette catégorie:

@implementation NSString (Empty)

    - (BOOL) isWhitespace{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }

@end

14
2017-12-26 12:20



Passez simplement votre chaîne à la méthode suivante:

+(BOOL)isEmpty:(NSString *)str
{
    if(str.length==0 || [str isKindOfClass:[NSNull class]] || [str isEqualToString:@""]||[str  isEqualToString:NULL]||[str isEqualToString:@"(null)"]||str==nil || [str isEqualToString:@"<null>"]){
        return YES;
    }
    return NO;
}

12
2018-02-03 10:52



Je mets ceci:

@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 le soi est nul, cette fonction n'est jamais appelée. Cela renverra faux, ce qui est désiré.


11
2018-06-02 07:30



Une autre option consiste à vérifier si elle est égale à @"" avec isEqualToString: ainsi:

if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}

9
2017-11-27 03:45



Utilisez simplement l'un des if  else conditions comme indiqué ci-dessous:

Méthode 1:

if ([yourString isEqualToString:@""]) {
        // yourString is empty.
    } else {
        // yourString has some text on it.
    }

Méthode 2:

if ([yourString length] == 0) {
    // Empty yourString
} else {
    // yourString is not empty
}

5
2017-08-01 10:11