NSString对象比较为nil

时间:2013-10-05 10:46:21

标签: cocoa object-code

所以我声明了NSString对象:

NSString * XMLOut;

现在这个对象可以为空或非空。

我怎么能看到它?

If ([XMLOut isEqual:nil]) {
    NSLog(@"XMLOut is empty");
} else {
    NSLog(@"XMLOut is not empty");
  }

是正确的吗?

1 个答案:

答案 0 :(得分:1)

  

现在这个对象可以为空或非空。

空与nil不同。

空字符串仍然是一个字符串。它有一个length(零),你可以为它添加其他字符串,将它包含在字符串中以便由某个字符连接等等。

nil不是对象。那里没有字符串。那里什么都没有。它没有长度,也没有任何其他属性。

那么,你的意思是“我想比较我的字符串,可能是nil,以确定它是nil”,还是“我想比较我的字符串,这可能是< em>为空,以确定它是否为空“?

测试它是nil

isEqual:方法的文档说:

  
      
  • anObject:要与接收器进行比较的对象。可能是nil,在这种情况下,此方法会返回NO
  •   

因此,如果XMLOut不是nil,则[XMLOut isEqual:nil]保证会返回NO

但如果它不是nil怎么办?

nil的消息基本上都返回了所有类型的零(除了结构等),其中包括NO

这意味着[XMLOut isEqual:nil] 总是NO

  • 如果XMLOutnil,则无论问题如何,答案始终为NO
  • 如果XMLOut不是nil,则答案为NO,因为没有字符串等于nil

请改用==运算符。 XMLOut == nil会正确测试XMLOutnil

测试它是否为空

正如mah在评论中告诉你的那样,请在字符串中查询length

  • 如果XMLOutnil,则无论问题如何,答案始终为零。
  • 如果XMLOut为空字符串,则其长度为零。
  • 如果XMLOut是任何其他字符串,则其长度大于零。