2010-05-09 30 views
9

¿Cuál es la mejor opción para determinar si un NSString está vacío? En este momento estoy usando lo siguiente:Cómo determinar si NSString está vacío

if (string == nil || [string isEqualToString:@""]) { // do something }

Gracias por cualquier consejo.

Respuesta

24
if ([string length] == 0) { 
    // do something 
} 

Si la cadena es nil, entonces el mensaje a nil volverá a cero, y todo seguirá siendo así.

+0

+1 por tu respuesta. ¿Qué hay de los espacios en blanco? ¿Qué pasa si no quieres contarlos? ¿Alguna forma práctica? – cocoafan

+1

@cocoafan No concisamente. Si necesita hacerlo con frecuencia, le sugiero que agregue una categoría a 'NSString', algo así como' isNotEmpty', que puede hacer sus comprobaciones personalizadas. Luego puede hacer 'if ([string isNotEmpty]) {... } 'y también manejará' nil's correctamente ... –

+0

Puede que desee saber por qué la longitud retornó 0 por lo que a veces podría ser útil comprobar si no hay nada, después de obtener el cero. – uchuugaka

0

No es bueno resolución de

[nil length] es 0

(0==0) es 1

continuación ([string length] == 0) habrá 1. Aunque está mal.

La mejor manera es

if (![string length]) { 

} 
+2

la longitud es un NÚMERO y se debe verificar con == 0. if (! [String length]) es un hack de c y (semánticamente) no es correcto ya que! debería ser usado para booleanos. Por favor, no digas que todavía funciona. Yo sé eso. Es simplemente neanderthalish. – cocoafan

+2

Esta respuesta es incorrecta. ! 0 es 1 también, lo mismo que 0 == 0. El resultado es el mismo, lo único que se puede argumentar aquí es una cuestión de estilo – Sven

2

Esto no sólo comprobará si no hay nada en la cadena sino también devolverá FALSE si es sólo un espacio en blanco.

NSString *tempString = [myString stringByReplacingOccurrencesOfString:@" " withString:@""]; 


if ([tempString length] != 0) { 
    //There is something in the string. 
} else { 
    //There is nothing or it is just whitespace. 
} 
+0

Esto solo elimina los espacios en blanco iniciales y finales – uchuugaka

+0

¿Sabes qué, tú? estas en lo correcto. Estaba haciendo mucha experimentación y debo haber copiado y pegado el código incorrecto. Esta corregido Esto es mucho más eficiente. –

+1

Sea lo que sea, '-stringByReplacingOccurrencesOfString: withString:' no es especialmente eficiente. Mucho mejor para probar lo que realmente estás buscando: personajes que no sean de espacios en blanco. '! myString || [myString rangeOfCharacterFromSet: [[NSCharacterSet whitespaceCharacterSet] invertedSet] .location == NSNotFound' (En este caso, debe probar si 'myString' es' nil' explícitamente porque un 'NSRange' resultante de la mensajería' nil' no tendrá 'NSNotFound' en su campo' ubicación'). –