518 votos

¿Cómo puedo comprobar si un string está vacío en Objective C?

¿Cómo puedo probar si una NSString está vacía en C Objetivo?

926voto

Marc Charbonneau Puntos 30464

Usted puede comprobar si [string length] == 0. Esto va a comprobar si es válido, pero cadena vacía ( @ " " ), así como si su nula, ya que llamando length en la nada también devolverá 0.

120voto

Matt G Puntos 1989

Marc respuesta es correcta. Pero voy a aprovechar esta oportunidad para incluir un puntero a Wil Shipley generalizado isEmpty, que ha compartido 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);
}

83voto

El primer enfoque es válido, pero no funciona si la cadena contiene espacios en blanco (@" "). Así debe desactivar esta espacios en blanco antes de la prueba.

Este código de forma clara todos los espacios en blanco a ambos lados de la cadena:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

Una buena idea es crear una macro, por lo que no tendrá que escribir este monstruo de la línea:

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

Ahora usted puede utilizar:

NSString *emptyString = @"   ";

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

26voto

Rob Puntos 1247

Una de las mejores soluciones que he visto (mejor que Matt G) se esta mejora de la función en línea recogí en algunos Git Hub de repo (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);
}

9voto

Jim Thio Puntos 7137

Me 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 el auto es igual a cero, esta función no se llama nunca. Devolverá false, lo que se desea.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X