Как вы проверяете, является ли NSString пустым? или все пробелы или ноль? с одним вызовом метода?
NSString пуст
Ответ 1
Вы можете попробовать что-то вроде этого:
@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
Ознакомьтесь с NSString
ссылкой на АЦП.
Ответ 2
Это то, что я использую, расширение для 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;
}
Ответ 3
Я использую
+ (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;
}
Ответ 4
Мне не нравится бросать еще один журнал на этот исключительно старый огонь, но я не люблю редактировать кого-то другого - особенно, когда он выбрал ответ.
Якоб задал следующий вопрос: как мне это сделать с помощью одного вызова метода?
Ответ заключается в создании категории, которая в основном расширяет функциональность базового класса Objective-C и записывает метод "стенографии" для всего другого кода.
Однако технически строка с символами пробела не пуста - она просто не содержит никаких видимых глифов (последние пару лет я использую метод с именем isEmptyString: и преобразован сегодня после прочтения этого вопроса, ответ и комментарий).
Чтобы создать категорию, перейдите в Option + Click → New File... (или File → New → File... или просто команду + n) → выберите Objective-C Категория. Выберите название для категории (это поможет им использовать пространство имен и уменьшить возможные конфликты в будущем) - выберите NSString из раскрывающегося списка "Категория" - сохраните файл где-нибудь. (Примечание: файл будет автоматически называться NSString + YourCategoryName.h и .m.)
Я лично ценю самодокументирующую природу Objective-C; поэтому я создал следующий метод категорий в NSString, модифицирующий мой оригинальный метод isEmptyString: и выбрав более метко объявленный метод (я доверяю компилятору сжать код позже - может быть, слишком много).
Заголовок (.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
Реализация (.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
Чтобы вызвать метод, обязательно #import файл NSString + MyCategoryName.h в .h или .m(я предпочитаю класс .m для категорий), в котором вы выполняете эту проверку, и выполните следующие действия:
NSString* myString = @""; // or nil, or tabs, or spaces, or something else
BOOL hasGlyphs = [NSString visibleGlyphsExistInString:myString];
Мы надеемся, что это все основания. Я помню, когда я впервые начал развиваться для Objective-C, категория была одной из тех "да?" для меня - но теперь я использую их совсем немного, чтобы увеличить повторное использование.
Изменить: И я полагаю, технически, если мы снимаем символы, это:
[[copy stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0
На самом деле все, что нужно (он должен делать все, что делает этот метод категории, включая копию), но я мог ошибаться в этом вопросе.
Ответ 5
Я использую это определение, поскольку оно работает с нильными строками, а также с пустыми строками:
#define STR_EMPTY(str) \
str.length == 0
На самом деле теперь это выглядит так:
#define STR_EMPTY(str) \
(![str isKindOfClass:[NSString class]] || str.length == 0)
Ответ 6
На основе ответа Якоба Релкина и комментария Джонатана:
@implementation TextUtils
+ (BOOL)isEmpty:(NSString*) string {
if([string length] == 0 || ![[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) {
return YES;
}
return NO;
}
@end
Ответ 7
Должно быть проще:
if (![[string stringByReplacingOccurencesOfString:@" " withString:@""] length]) { NSLog(@"This string is empty"); }
Ответ 8
Возможно, вы можете попробовать что-то вроде этого:
+ (BOOL)stringIsEmpty:(NSString *)str
{
return (str == nil) || (([str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]).length == 0);
}