Maison  >  Questions et réponses  >  le corps du texte

objective-c - 如何检测字符串在Obj-C里是否为空?

如何检测NSString在Objective-C里是否为空?

原问题:How do I test if a string is empty in Objective C?

大家讲道理大家讲道理2711 Il y a quelques jours462

répondre à tous(1)je répondrai

  • 天蓬老师

    天蓬老师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
    }
    

    répondre
    0
  • Annulerrépondre