¿Cómo se prueba si un NSString está vacío? o todos los espacios en blanco o nulos? con un solo método de llamada?NSString está vacío
Respuesta
Usted puede intentar algo así:
@implementation NSString (JRAdditions)
+ (BOOL)isStringEmpty:(NSString *)string {
if([string length] == 0) { //string is empty or nil
return YES;
}
if(![[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) {
//string is all whitespace
return YES;
}
return NO;
}
@end
Mira la referencia NSString
de ADC.
¿cómo puedo hacer todo eso con una sola llamada a un método? – Yazzmi
@Yazzmi, edité mi respuesta. –
Como acaba de escribir una función para usted, llame a eso. Aunque lo cambiaría para que devuelva SÍ si estaba vacío, nulo o tenía espacios en blanco, y NO si la cadena tenía caracteres (la función como está escrita devolverá NO si hay caracteres en la cadena). –
utilizo,
+ (BOOL) stringIsEmpty:(NSString *) aString {
if ((NSNull *) aString == [NSNull null]) {
return YES;
}
if (aString == nil) {
return YES;
} else if ([aString length] == 0) {
return YES;
} else {
aString = [aString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([aString length] == 0) {
return YES;
}
}
return NO;
}
+ (BOOL) stringIsEmpty:(NSString *) aString shouldCleanWhiteSpace:(BOOL)cleanWhileSpace {
if ((NSNull *) aString == [NSNull null]) {
return YES;
}
if (aString == nil) {
return YES;
} else if ([aString length] == 0) {
return YES;
}
if (cleanWhileSpace) {
aString = [aString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([aString length] == 0) {
return YES;
}
}
return NO;
}
Esto es lo que yo uso, una extensión de NSString:
+ (BOOL)isEmptyString:(NSString *)string;
// Returns YES if the string is nil or equal to @""
{
// Note that [string length] == 0 can be false when [string isEqualToString:@""] is true, because these are Unicode strings.
if (((NSNull *) string == [NSNull null]) || (string == nil)) {
return YES;
}
string = [string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([string isEqualToString:@""]) {
return YES;
}
return NO;
}
En lugar de hacer la comparación final @" "debería ver si la [longitud de cadena] == 0 –
estoy usando esta definición, ya que funciona con cadenas nulas, así como cadenas vacías:
#define STR_EMPTY(str) \
str.length == 0
En realidad ahora es así:
#define STR_EMPTY(str) \
(![str isKindOfClass:[NSString class]] || str.length == 0)
Sobre la base de la respuesta de Jacob Relkin y Jonathan comentario:
@implementation TextUtils
+ (BOOL)isEmpty:(NSString*) string {
if([string length] == 0 || ![[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) {
return YES;
}
return NO;
}
@end
odio a lanzar otro registro en esta excepcionalmente viejo fuego, pero estoy preocupado por la edición de la respuesta de otra persona - especialmente cuando es el seleccionado responder.
Jacob hizo una pregunta de seguimiento: ¿Cómo puedo hacer esto con una sola llamada a un método?
La respuesta es crear una categoría, que básicamente amplía la funcionalidad de una clase Objective-C básica, y escribir un método de "taquigrafía" para el resto del código.
Sin embargo, técnicamente, una cadena con espacios en blanco no está vacía, simplemente no contiene glifos visibles (durante los últimos años he estado utilizando un método llamado ismptyString: y convertido hoy después de leer este conjunto de pregunta, respuesta y comentario).
Para crear una categoría, vaya a Opción + clic -> Nuevo archivo ... (o Archivo -> Nuevo -> Archivo ... o simplemente comando + n) -> elija categoría Objetivo-C. Elija un nombre para la categoría (esto ayudará a su espacio de nombres y reducirá posibles conflictos futuros) - elija NSString en el menú desplegable "Categoría activada" - guarde el archivo en algún lugar. (Nota: El archivo se denominará automáticamente NSString + YourCategoryName.h y .m.)
Personalmente valoro la naturaleza autoevaluada de Objective-C; por lo tanto, he creado el siguiente método de categoría en NSString modificando mi método isEmptyString original y optando por un método declarado más acertadamente (confío en que el compilador comprima el código más tarde, tal vez un poco demasiado).
cabecera (.h):
#import <Foundation/Foundation.h>
@interface NSString (YourCategoryName)
/*! Strips the string of white space characters (inlcuding new line characters).
@param string NSString object to be tested - if passed nil or @"" return will
be negative
@return BOOL if modified string length is greater than 0, returns YES;
otherwise, returns NO */
+ (BOOL)visibleGlyphsExistInString:(NSString *)string;
@end
implementación (.m):
@implementation NSString (YourCategoryName)
+ (BOOL)visibleGlyphsExistInString:(NSString *)string
{
// copying string should ensure retain count does not increase
// it was a recommendation I saw somewhere (I think on stack),
// made sense, but not sure if still necessary/recommended with ARC
NSString *copy = [string copy];
// assume the string has visible glyphs
BOOL visibleGlyphsExist = YES;
if (
copy == nil
|| copy.length == 0
|| [[copy stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0
) {
// if the string is nil, no visible characters would exist
// if the string length is 0, no visible characters would exist
// and, of course, if the length after stripping the white space
// is 0, the string contains no visible glyphs
visibleGlyphsExist = NO;
}
return visibleGlyphsExist;
}
@end
Para llamar al método asegúrese de import el archivo NSString + MyCategoryName.h en el .h o .m (Prefiero el.m para las categorías) de clase donde se ejecuta este tipo de validación y de hacer lo siguiente:
NSString* myString = @""; // or nil, or tabs, or spaces, or something else
BOOL hasGlyphs = [NSString visibleGlyphsExistInString:myString];
Esperemos que cubre todas las bases. Recuerdo que cuando comencé a desarrollar Objective-C, la categoría era una de esas "¿eh?" pruebas para mí, pero ahora las uso bastante para aumentar la reutilización.
Editar: Y supongo que, técnicamente, si estamos despojar caracteres, esto:
[[copy stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0
es realmente todo lo que se necesita (debe hacer todo lo que hace el método categoría, incluyendo la copia), pero Podría estar equivocado en ese punto.
que ahora convertí a esa sola línea en lugar de la categoría método en todo mi código - funciona como se esperaba; por lo tanto, no es necesario crear código adicional para mantener. –
debería ser más fácil:
if (![[string stringByReplacingOccurencesOfString:@" " withString:@""] length]) { NSLog(@"This string is empty"); }
Tal vez usted puede intentar algo como esto:
+ (BOOL)stringIsEmpty:(NSString *)str
{
return (str == nil) || (([str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]).length == 0);
}
- 1. Cómo determinar si NSString está vacío
- 2. compruebe si NSNumber está vacío
- 3. $ _SERVER ['PHP_AUTH_USER'] está vacío
- 4. ¿STL está vacío()?
- 5. ¿Está bien liberar 'vacío *'?
- 6. HttpContext.Current.User.Identity.Name está vacío
- 7. ¿Está vacío de tragar?
- 8. getAnnotations() está vacío
- 9. Mi httpd.conf está vacío
- 10. ¿Cómo se elimina el espacio vacío adicional en NSString?
- 11. error: el archivo objeto está vacío .git/objects /../ .. está vacío - fatal: objeto suelto ... está dañado
- 12. ¿Está vacío enum (enum {};) portátil?
- 13. Observable creadoArray está siempre vacío
- 14. Jquery - JSON.stringify, array está vacío
- 15. jQuery .error jqXHR.responseText está vacío
- 16. jquery: si ul está vacío
- 17. por qué $ _REQUEST está vacío
- 18. Comprueba si el atributo CoreData está vacío
- 19. jQuery - validación de entrada sencilla - "vacío" y "no está vacío"
- 20. ¿Qué devuelve un IQueryable vacío como cuando está vacío?
- 21. ¿Por qué mi CommandArgument está vacío?
- 22. ¿Está vacío el archivo de verificación
- 23. ¿Por qué mi $ _ENV está vacío?
- 24. ¿Verifica si un NSMutableDictionary está vacío?
- 25. $ ("Entrada: no (: vacío)") no está trabajando
- 26. Campo de verificación si está vacío
- 27. vista vacía cuando ListView está vacío
- 28. jQuery detectar si textarea está vacío
- 29. Prueba si el objeto WP_Query está vacío
- 30. php es nulo o está vacío?
Posible DUP: http: //stackoverflow.com/questions/899209/how-do-i- test-if-a-string-is-empty-in-objective-c –