Come si verifica se una NSString è vuota? o tutto lo spazio bianco o nulla? con una singola chiamata al metodo?NSString è vuoto
risposta
si può provare qualcosa di simile:
@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
Partenza il riferimento NSString
su ADC.
come posso fare tutto ciò con una chiamata al metodo singolo? – Yazzmi
@Yazzmi, ho modificato la mia risposta. –
Dato che ha appena scritto una funzione per te, chiamala. Anche se lo cambierei per restituire SÌ se fosse vuoto, nullo, o avesse spazi bianchi - e NO se la stringa aveva dei caratteri in esso (la funzione come scritta restituirà NO se nella stringa ci sono dei caratteri). –
che uso,
+ (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;
}
Questo è quello che uso, un'estensione 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;
}
Invece di fare il confronto finale con @" "dovresti solo vedere se [lunghezza della stringa] == 0 –
Sto usando questo definire come funziona con le stringhe nulle così come stringhe vuote:
#define STR_EMPTY(str) \
str.length == 0
In realtà ora il suo in questo modo:
#define STR_EMPTY(str) \
(![str isKindOfClass:[NSString class]] || str.length == 0)
Sulla base della risposta Jacob Relkin e Jonathan commento:
@implementation TextUtils
+ (BOOL)isEmpty:(NSString*) string {
if([string length] == 0 || ![[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) {
return YES;
}
return NO;
}
@end
Odio buttare un altro registro a questa eccezionale vecchio fuoco, ma sono diffidenti sulla modifica la risposta di qualcun altro - specialmente quando è selezionato risposta.
Jacob ha fatto una domanda di follow-up: come posso farlo con una singola chiamata di metodo?
La risposta è, creando una categoria - che sostanzialmente estende la funzionalità di una classe Objective-C di base - e scrivendo un metodo "stenografia" per tutto l'altro codice.
Tuttavia, tecnicamente, una stringa con caratteri di spazio bianco non è vuota - semplicemente non contiene alcun glifo visibile (negli ultimi due anni ho utilizzato un metodo chiamato ÈEmptyString: e convertito oggi dopo aver letto questo domanda, risposta e commento impostato).
Per creare una categoria, andare su Opzione + Fare clic su -> Nuovo file ... (o File -> Nuovo -> File ... o semplicemente comando + n) -> selezionare Categoria C-Objective. Scegli un nome per la categoria (questo aiuterà lo spazio dei nomi e ridurrà possibili conflitti futuri) - scegli NSString dal menu a discesa "Categoria su" - salva il file da qualche parte. (Nota: il file sarà automaticamente denominato NSString + YourCategoryName.h e .m.)
Personalmente apprezzo la natura autocritica di Objective-C; quindi, ho creato il seguente metodo di categoria su NSString modificando il mio originale isEmptyString: metodo e optando per un metodo dichiarato più appropriato (spero che il compilatore comprima il codice in seguito, forse un po 'troppo).
intestazione (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
attuazione (.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
Per chiamare il metodo sia sicuro #import file NSString + MyCategoryName.h in .h o .m (io preferisco il.m per le categorie) classe dove si esegue questo tipo di convalida e procedere come segue:
NSString* myString = @""; // or nil, or tabs, or spaces, or something else
BOOL hasGlyphs = [NSString visibleGlyphsExistInString:myString];
Speriamo che copre tutte le basi. Ricordo quando iniziai a sviluppare per Objective-C la categoria era una di quelle "eh?" ordalie per me - ma ora li uso un bel po 'per aumentare la riusabilità.
Edit: E suppongo che, tecnicamente, se stiamo strippaggio caratteri, questo:
[[copy stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0
veramente è tutto ciò che è necessario (dovrebbe fare tutto ciò che il metodo categoria fa, compresa la copia), ma Potrei sbagliarmi su quel punteggio.
Ora ho convertito solo quella riga invece della categoria metodo in tutto il mio codice - funziona come previsto; quindi, non è necessario creare codice aggiuntivo da mantenere. –
dovrebbe essere più facile:
if (![[string stringByReplacingOccurencesOfString:@" " withString:@""] length]) { NSLog(@"This string is empty"); }
forse si può provare qualcosa di simile:
+ (BOOL)stringIsEmpty:(NSString *)str
{
return (str == nil) || (([str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]).length == 0);
}
- 1. Come si rimuove lo spazio vuoto aggiuntivo in NSString?
- 2. controllare se NSNumber è vuoto
- 3. NSString da NSArray
- 4. da MemoryStream è vuoto
- 5. CommPortIdentifier.getPortIdentifiers è vuoto
- 6. getAnnotations() è vuoto
- 7. angolare $ routeParams è vuoto
- 8. Jenkins è praticamente vuoto
- 9. Android DialogFragment è vuoto
- 10. IEnumerable è vuoto?
- 11. youtube iFrame è vuoto
- 12. $ _SERVER ['PHP_AUTH_USER'] è vuoto
- 13. mio httpd.conf è vuoto
- 14. Sostituire un char in NSString
- 15. Come aggiungere una NSString a un'altra NSString
- 16. + [NSString stringWithString:] - qual è il punto?
- 17. NSString stringWithFormat tipo restituito, perché è "id"?
- 18. Rilevare se NSString è un numero float
- 19. NSString "nil or empty" check - è completo?
- 20. NSString stringWithFormat
- 21. NSString all'equazione
- 22. anteporre NSString?
- 23. Verifica se l'attributo CoreData è vuoto
- 24. Global NSString
- 25. Se Linq Result è vuoto
- 26. Perché VM Tracker è vuoto?
- 27. XmlNodeList (perché è questo vuoto)
- 28. Verificare se NumericUpDown è vuoto
- 29. Qt QNetworkReply è sempre vuoto
- 30. Android Volley error.getMessage() è vuoto
posible DUP: http: //stackoverflow.com/questions/899209/how-do-i- test-if-a-string-is-vuoto-in-obiettivo-c –