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

Mat*_* H. 33 objective-c

我在NSString上写了一个小类,我想知道这个方法是否准确处理了所有潜在的用例:

更新:澄清 - 我想确保我没有错过一些涉及字符编码等的古怪案例.

@implementation NSString (Helpers)

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

样品用法:

-(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
Run Code Online (Sandbox Code Playgroud)

Leg*_*ess 121

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

if (!aString.length)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • !当aString为零时,aString.length为true,我不知道为什么.但是`aString.length!= 0`对我有用! (3认同)
  • 这正是它应该的样子 - 对于 nil 字符串来说是正确的。 (2认同)

das*_*ght 29

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

+(BOOL)stringIsNilOrEmpty:(NSString*)aString {
    return !(aString && aString.length);
}
Run Code Online (Sandbox Code Playgroud)

  • 几个选择:Dot语法应该用于属性,而不是方法.长度是一种方法.作为一个额外的好处,如果你正确地调用长度,你不必再次检查字符串的nil.所以,你可以`返回[aString length] == 0;`这是有效的,因为在nil上调用长度将返回0. (16认同)

fat*_*oku 8

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

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

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

编辑:@Michael G. Emmons将此作为对该答案的最后评论...对他表示赞赏,但我将其列为答案本身.

  • 我相信你的情况正好相反. (3认同)