NSString“无或空”检查 - 这是完整的吗?

时间:2013-01-23 03:44:24

标签: objective-c

我在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

6 个答案:

答案 0 :(得分:119)

我只使用下一个条件,甚至不需要类别:

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

使用Objective-C理论,给NIL的消息将返回零或零,所以基本上你不必测试nil

答案 1 :(得分:29)

您可以通过删除条件来简化代码:

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

答案 2 :(得分:8)

@dasblinkenlight的答案很好,但我会使用的更具可读性的条件检查是:

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

非常简洁,不需要单独的便利功能定义。它很容易记住。

编辑:@Michael G. Emmons将此作为对该答案的最后评论......对他有所信任,但我将其列为答案本身。

答案 3 :(得分:2)

这种“非空或空白”测试的一些示例作为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

答案 4 :(得分:0)

  

只需检查字符串长度

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

消息到NIL将返回nil或0,因此无需测试nil:)。

     

快乐的编码......

答案 5 :(得分:0)

确保在计算长度之前检查空格,修剪空格。

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