Pregunta ¿Cómo pruebo si una cadena está vacía en Objective C?


¿Cómo pruebo si un NSString está vacío en Objective C?


614
2018-05-22 18:12


origen


Respuestas:


Puedes verificar si [string length] == 0. Esto verificará si es una cadena válida pero vacía (@ "") y si es nula, desde que se realizó la llamada length en nil también devolverá 0.


1089
2018-05-22 18:14



La respuesta de Marc es correcta. Pero aprovecharé esta oportunidad para incluir un puntero al generalizado de Wil Shipley isEmpty, que compartió en su 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



El primer enfoque es válido, pero no funciona si su cadena tiene espacios en blanco (@" ") Por lo tanto, debe despejar estos espacios en blanco antes de probarlo.

Este código borra todos los espacios en blanco en ambos lados de la cadena:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

Una buena idea es crear una macro, para que no tengas que escribir esta línea de monstruos:

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

Ahora puedes usar:

NSString *emptyString = @"   ";

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

92
2017-10-27 13:37



Una de las mejores soluciones que he visto (mejor que la de Matt G) es esta función mejorada en línea que recogí en algún repositorio de Git Hub (el de Wil Shipley, pero no puedo encontrar el enlace):

// 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



Deberías usar mejor esta categoría:

@implementation NSString (Empty)

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

@end

14
2017-12-26 12:20



Simplemente pase su cadena al siguiente método:

+(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



Puse esto:

@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

El problema es que si self es nulo, esta función nunca se llama. Devolverá falso, lo cual es deseado.


11
2018-06-02 07:30



Otra opción es verificar si es igual a @"" con isEqualToString: al igual que:

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

9
2017-11-27 03:45



Solo usa uno de los if  else condiciones como se muestra a continuación:

Método 1:

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

Método 2:

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

5
2017-08-01 10:11



Versión Swift

Aunque esta es una pregunta del Objetivo C, necesitaba usar NSString en Swift así que también incluiré una respuesta aquí.

let myNSString: NSString = ""

if myNSString.length == 0 {
    print("String is empty.")
}

O si NSString es un Opcional:

var myOptionalNSString: NSString? = nil

if myOptionalNSString == nil || myOptionalNSString!.length == 0 {
    print("String is empty.")
}

// or alternatively...
if let myString = myOptionalNSString {
    if myString.length != 0 {
        print("String is not empty.")
    }
}

El Swift normal String la versión es

let myString: String = ""

if myString.isEmpty {
    print("String is empty.")
}

Ver también: ¿Verifica cadena vacía en Swift?


5
2017-07-09 19:59



Puede ser que esta respuesta sea el duplicado de respuestas ya dadas, pero hice pocas modificaciones y cambios en el orden de verificar las condiciones. Por favor, consulte el siguiente código:

+(BOOL)isStringEmpty:(NSString *)str
    {
        if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
            return YES;
       }
        return NO;
    }

5
2017-07-01 09:34