【发布时间】:2013-11-09 17:47:55
【问题描述】:
我有一个NSString 对象,
NSString *aString;
那么下面两个版本是等价的吗?
版本 1:
if ( (NSString *)[NSNull null] == aString )
{
// Logic handling
}
第 2 版:
if ( nil == aString )
{
// Logic handling
}
参考帖子
更新 - 测试结果
我的简单测试结果表明以上两个版本的行为不同:
-
当
aString被初始化然后分配nil时:false用于版本 1 中的表达式,true用于版本 2 中的表达式。 -
当
aString被初始化为@""时。false用于版本 1 中的表达式,false用于版本 2 中的表达式。
因此很明显,这两个版本的行为并不相同。
测试代码:
NSString *aString = nil;
NSString *bString = [NSString stringWithFormat:@""];
if ((NSString *)[NSNull null] == aString) {
NSLog(@"a1 - true");
} else {
NSLog(@"a1 - false");
}
if (nil == aString) {
NSLog(@"a2 - true");
} else {
NSLog(@"a2 - false");
}
if ((NSString *)[NSNull null] == bString) {
NSLog(@"b1 - true");
} else {
NSLog(@"b1 - false");
}
if (nil == bString) {
NSLog(@"b2 - true");
} else {
NSLog(@"b2 - false");
}
控制台输出:
2013-10-31 00:56:48.132 emptyproject[31104:70b] a1 - false
2013-10-31 00:56:48.133 emptyproject[31104:70b] a2 - true
2013-10-31 00:56:48.133 emptyproject[31104:70b] b1 - false
2013-10-31 00:56:48.133 emptyproject[31104:70b] b2 - false
更新 - “空字符串”是什么意思**
现在我已经更清楚地表明,NSString 对象是 nil 和它是一个有效的初始化实例,它持有一个空字符串值 @"" 是不同的。这篇文章我真正需要的是如何测试我的NSString对象是否初始化成功,即aString是否为nil。我想知道上面两个版本的测试代码有什么区别。
【问题讨论】:
-
它们怎么可能相等?
-
致@Sulthan,所以我不能用
if ( aString == nil )替换if ( aString == (NSString *)[NSNull null] )? -
没有。你想做什么?
-
它是等价的,但是你需要更少的代码:)
-
@congliu 你应该巧妙地解析字典。使用
NSDictionary上的类别自动将NSNull转换为nil。
标签: objective-c nsstring null nsnull