Как проверить, является ли строка пустой в Objective-C? - PullRequest
634 голосов
/ 22 мая 2009

Как проверить, является ли NSString пустым в Objective-C?

Ответы [ 30 ]

1127 голосов
/ 22 мая 2009

Вы можете проверить, если [string length] == 0. Это проверит, является ли это допустимой, но пустой строкой (@ ""), а также нулем, так как вызов length для nil также вернет 0.

126 голосов
/ 22 мая 2009

Марк ответ правильный. Но я воспользуюсь этой возможностью, чтобы включить указатель на обобщенный isEmpty Уила Шипли, которым он поделился в своем блоге :

static inline BOOL IsEmpty(id thing) {
return thing == nil
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}
93 голосов
/ 27 октября 2009

Первый подход действителен, но не работает, если в вашей строке есть пробелы (@" "). Поэтому вы должны очистить эти пробелы перед тестированием.

Этот код очищает все пробелы с обеих сторон строки:

[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];

Хорошая идея - создать один макрос, так что вам не нужно вводить эту строку монстра:

#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]

Теперь вы можете использовать:

NSString *emptyString = @"   ";

if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
30 голосов
/ 09 сентября 2010

Одно из лучших решений, которое я когда-либо видел (лучше, чем у Мэтта Дж), - это улучшенная встроенная функция, которую я использовал в репозитории Git Hub (Уил Шипли, но я не могу найти ссылку):

// Check if the "thing" pass'd is empty
static inline BOOL isEmpty(id thing) {
    return thing == nil
    || [thing isKindOfClass:[NSNull class]]
    || ([thing respondsToSelector:@selector(length)]
        && [(NSData *)thing length] == 0)
    || ([thing respondsToSelector:@selector(count)]
        && [(NSArray *)thing count] == 0);
}
16 голосов
/ 26 декабря 2009

Вам лучше использовать эту категорию:

@implementation NSString (Empty)

    - (BOOL) isWhitespace{
        return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
    }

@end
12 голосов
/ 03 февраля 2014

Просто передайте строку следующим способом:

+(BOOL)isEmpty:(NSString *)str
{
    if(str.length==0 || [str isKindOfClass:[NSNull class]] || [str isEqualToString:@""]||[str  isEqualToString:NULL]||[str isEqualToString:@"(null)"]||str==nil || [str isEqualToString:@"<null>"]){
        return YES;
    }
    return NO;
}
11 голосов
/ 27 ноября 2011

Другой вариант - проверить, равно ли оно @"" с isEqualToString:, например:

if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}
11 голосов
/ 02 июня 2011

Я положил это:

@implementation NSObject (AdditionalMethod)
-(BOOL) isNotEmpty
{
    return !(self == nil
    || [self isKindOfClass:[NSNull class]]
    || ([self respondsToSelector:@selector(length)]
        && [(NSData *)self length] == 0)
    || ([self respondsToSelector:@selector(count)]
        && [(NSArray *)self count] == 0));

};
@end

Проблема в том, что если self равно nil, эта функция никогда не вызывается. Он вернет false, что желательно.

6 голосов
/ 09 июля 2015

Swift Version

Несмотря на то, что это вопрос по Objective C, мне нужно было использовать NSString в Swift, поэтому я также включу ответ здесь.

let myNSString: NSString = ""

if myNSString.length == 0 {
    print("String is empty.")
}

Или, если NSString является необязательным:

var myOptionalNSString: NSString? = nil

if myOptionalNSString == nil || myOptionalNSString!.length == 0 {
    print("String is empty.")
}

// or alternatively...
if let myString = myOptionalNSString {
    if myString.length != 0 {
        print("String is not empty.")
    }
}

Обычная версия Swift String -

let myString: String = ""

if myString.isEmpty {
    print("String is empty.")
}

См. Также: Проверить пустую строку в Swift?

6 голосов
/ 01 августа 2012

Просто используйте одно из условий if else, как показано ниже:

Метод 1:

if ([yourString isEqualToString:@""]) {
        // yourString is empty.
    } else {
        // yourString has some text on it.
    }

Метод 2:

if ([yourString length] == 0) {
    // Empty yourString
} else {
    // yourString is not empty
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...