Подтвердить что ты не робот

NSString "nil or empty" check - это завершено?

Я писал небольшую категорию в NSString, и я хотел знать, точно ли этот метод обрабатывает все возможные варианты использования:

Обновление:, чтобы уточнить - я хотел удостовериться, что я не пропущу какой-то нечетный случай с кодировкой символов и т.д.

@implementation NSString (Helpers)

+(BOOL)stringIsNilOrEmpty:(NSString*)aString {
    if (!aString)
        return YES;
    return [aString isEqualToString:@""];
}
@end

Использование образца:

-(void) sampleUsage {
    NSString *emptyString = @"";
    NSString *nilString = nil;
    NSAssert([NSString stringIsNilOrEmpty:nilString] == YES, @"String is nil/empty");
    NSAssert([NSString stringIsNilOrEmpty:emptyString] == YES, @"String is nil/empty");
}
@end
4b9b3361

Ответ 1

Я использую только следующее условие и даже не нуждаюсь в категории:

if (!aString.length)
{
    ...
}

Используя теорию Objective-C, сообщение NIL вернет нуль или ноль, поэтому в основном вам не нужно проверять значение nil.

Ответ 2

Вы можете упростить код, удалив условное:

+(BOOL)stringIsNilOrEmpty:(NSString*)aString {
    return !(aString && aString.length);
}

Ответ 3

@dasblinkenlight ответ прекрасен, но гораздо более читаемая условная проверка, которую я бы использовал, это:

NSString *string = ...;   // define the string
if ([string length] == 0) {
    // Do stuff with the string
} else {
    // The string is empty or nil here
}

Очень краткий и не требует отдельного определения функции удобства. Это достаточно легко запомнить.

EDIT: @Michael G. Emmons опубликовал это как последний комментарий к этому ответу... кредит ему, но я перечисляю это как ответ сам по себе.

Ответ 4

Некоторые примеры такого типа "не являются пустыми или пустыми" в качестве категории на NSString.

// Please note that in general I advocate using a prefix on category methods
// to avoid category collisions.  I've not done this here for clarity. 
// The @interface is also excluded from this example for brevity.

@implementation NSString (MyAdditions)

- (BOOL)isNotEmpty
{
  return [self length] != 0;
}

- (BOOL)isNotBlank
{
  if ([self isNotEmpty])
  {
    NSCharacterSet *nonWhitespaceSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet];
    NSRange range = [self rangeOfCharactersFromSet:nonWhitespaceSet];
    return range.location != NSNotFound;
  }

  return NO;
}

@end

Ответ 5

Просто проверьте длину строки

> if (!yourString.length){
>     //your code  } a

сообщение NIL вернет нуль или 0, поэтому нет необходимости проверять значение nil:).

Счастливое кодирование...

Ответ 6

Обязательно проверьте пробелы, обрезайте пробелы перед вычислением длины.

+(BOOL)stringIsNilOrEmpty:(NSString*)aString {
    return !aString || [[aString  stringByTrimmingCharactersInSet:
                    [NSCharacterSet whitespaceCharacterSet]] length] == 0;
}