我在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
答案 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;
}