plus como activo activar iphone ios objective-c string nsstring

iphone - como - NSString está vacío



nfc iphone 8 plus activar (8)

Basado en la respuesta de Jacob Relkin y Jonathan comenta:

@implementation TextUtils + (BOOL)isEmpty:(NSString*) string { if([string length] == 0 || ![[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) { return YES; } return NO; } @end

¿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?


Debería ser más fácil:

if (![[string stringByReplacingOccurencesOfString:@" " withString:@""] length]) { NSLog(@"This string is empty"); }


Esto es lo que 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; }


Estoy usando esta definición, ya que funciona con cadenas nil, 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)


Odio lanzar otro registro en este fuego excepcionalmente antiguo, pero estoy receloso de editar la respuesta de otra persona, especialmente cuando es la respuesta seleccionada.

Jacob hizo una pregunta de seguimiento: ¿cómo puedo hacer esto con una única llamada al 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 caracteres en blanco no está vacía; simplemente no contiene glifos visibles (durante los últimos años he estado usando un método llamado isEmptyString: y convertido hoy después de leer esta pregunta, respuesta, y conjunto de comentarios).

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á NSString + YourCategoryName.h y .m) automáticamente

Personalmente aprecio la naturaleza de auto-documentación 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).

Encabezado (.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 Importar el archivo NSString + MyCategoryName.h en la clase .h o .m (Prefiero la .m para categorías) donde está ejecutando este tipo de validación y haga lo siguiente:

NSString* myString = @""; // or nil, or tabs, or spaces, or something else BOOL hasGlyphs = [NSString visibleGlyphsExistInString:myString];

Espero que eso cubra 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 quitando personajes, esto:

[[copy stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0

Es realmente todo lo que se necesita (debe hacer todo lo que hace el método de categoría, incluida la copia), pero podría estar equivocado en ese aspecto.


Puedes probar algo como esto:

@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

Consulte la referencia de NSString en ADC.


Tal vez puedas probar algo como esto:

+ (BOOL)stringIsEmpty:(NSString *)str { return (str == nil) || (([str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]).length == 0); }


Yo suelo,

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