如何解决在Objective-C中测试nil — ifx!= nilvs ifx
| 我在网上找到的大多数示例都这样写:if(x != nil)
// ...
这有什么问题吗?
if(x)
// ...
我在一个简单的程序中都尝试过,但没有发现任何区别。
解决方法
在Objective-C中,
nil
被定义为称为__DARWIN_NULL
的值,在if语句中,该值实质上等于0
或false
。因此,写作
if (x == nil)
与写if (!x)
相同,而写to8ѭ等于if (x)
(因为与false
比较会产生否定,而与true
比较则保持相同的条件)。
您可以以任何一种方式编写代码,而这实际上取决于您认为更易读的代码。我觉得ѭ9更有意义,但这取决于您的风格。
就像比较if (someCondition == true)
和if (someCondition)
。
这完全取决于您,以及谁将要阅读代码。
编辑:正如Yuji正确提到的那样,由于Objective-C是C的超集,所以任何求值为0以外的值的条件都被认为是真实的,因此,如果上例中的someCondition
求为的整数值,例如-1,将其与true
进行比较将得出false
,并且不会评估if语句。有一点要注意。
, 都
if (x != nil)
和
if ( x )
是等效的,因此请选择一种变体,以使您(以及其他将阅读和支持您的代码的人)对您的代码更易读。
, 检查nil的最佳和安全方法是
创建一个通用方法,并将所有这些添加为null:
+ (NSString *)trimWhiteSpaceAndNewLine:(NSString *)string {
NSString *stringSource = [NSString stringWithFormat:@\"%@\",string];
if ([stringSource isEqualToString:@\"(null)\"]) {
stringSource = @\"\";
return stringSource;
}
if ([stringSource isEqualToString:@\"<null>\"]) {
stringSource = @\"\";
return stringSource;
}
if ([stringSource isEqualToString:@\"<nil>\"]) {
stringSource = @\"\";
return stringSource;
}
if ([stringSource isKindOfClass:[NSNull class]]) {
stringSource = @\"\";
return stringSource;
}
if ([stringSource isEqualToString:@\"\"]) {
stringSource = @\"\";
return stringSource;
}
if (stringSource == nil) {
stringSource = @\"\";
return stringSource;
}
NSString *stringFinal = [stringSource stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return stringFinal;
}
并检查
NSString *strUuid = [Common trimWhiteSpaceAndNewLine:[dict valueForKeyPath:@\"detail.uuid\"]];
if (![strUuid isEqualToString:@\"\"]) {
// do your stuff
}
, 两者相同,这是一个样式问题,归结为您是否喜欢:
如果(某物){...}
与
如果(某事!=没有){...}
我总是发现#1更加清晰,但是#2在文档以及因此领域中得到广泛使用,因此最好既了解两种形式,又适应项目使用的内容,并在风格上保持一致。
, if([yourNullObject isKindOfClass:[NSNull class]]){
//if it is null
}else{
//if it is not null
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。