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);
}