【问题标题】:NSString object compare nilNSString 对象比较为零
【发布时间】:2013-10-12 09:01:26
【问题描述】:

所以我有我声明的 NSString 对象:

NSString *XMLOut;

现在这个对象可以是空的也可以是非空的。

我怎样才能看到它?

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

对吗?

【问题讨论】:

  • 使用if ([XMLOut length] == 0) NSLog(@"XMLOut is empty");

标签: cocoa object-code


【解决方案1】:

现在这个对象可以是空的也可以是非空的。

空与nil不同。

空字符串仍然是字符串。它有一个length(零),您可以将其他字符串附加到它,将其包含在要由某个字符连接的字符串中,等等。

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

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

测试是否为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 将正确测试XMLOut 是否为nil

测试是否为空

正如 mah 在他们的评论中已经告诉你的那样,询问字符串的 length

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

【讨论】:

  • 好的,我在这个测试中使用这个代码:If ([XMLOut length] == 0) {NSLog(@"XMLOut is empty);)
猜你喜欢
  • 2012-10-07
  • 2012-01-25
  • 2023-03-13
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多