我有一个XCode分析器标记有效代码的情况。
我们有一个NSString类别,它有一个方法isEmpty
,它检查字符串是否为空,包括检查nil字符串。当它与将字符串添加到数组中结合使用时,分析程序报错:
if (![NSString isEmpty:myString]) {
[_myArray addObject:myString];
}
分析器将抱怨Array element cannot be nil
,因为它不够聪明,无法检测到isEmpty
正在阻止它。
最好的解决方法是什么?我知道我可以将条件更改为if (myString && ![NSString isEmpty...
,但这似乎是一个笨拙的解决方案。
编辑:根据请求,以下是isEmpty
的正文:
+ (BOOL)isEmpty:(NSString *)string
{
return (string ? [string isEqualToString:@""] : YES);
}
您必须向分析器显示每个可能的逻辑路径,这是正确的。你的"变通办法"非常好。
可能是您的isEmpty
可以被编写以帮助分析器,但您没有显示,所以不可能说。根据您实际展示的内容,我建议您使用您的"变通方法"并继续前进。
在Objective-C中,检查non-nil
和non-empty
的NSString
最简单的方法是获得length
。对于nil
和empty
返回0,对于non-empty
返回合适的长度。
NSString *testNil = nil;
NSString *testEmpty = @"";
NSString *testNonEmpty = @"Hello";
NSInteger testNilLength = [testNil length]; // -> 0
NSInteger testEmptyLength = [testEmpty length]; // -> 0
NSInteger testNonEmptyLength = [testNonEmpty length]; // -> 5