【问题标题】:Check for NSNumber [duplicate]检查 NSNumber [重复]
【发布时间】:2016-01-17 13:58:55
【问题描述】:

我想检查属性是否存在 NSNumber,并排除变量为空、未定义、nil、NULL 等的任何情况。

属性定义如下:

@property (nonatomic, 保留) NSNumber * id;

我一直在使用以下:

if (item.id) {
//has a valid id such as 1,2,3,4
}
else {
//does not have a valid id.. could be 0, nil, NULL etc.
}

我这样做对吗?

注意,我知道可以使用 ([item.id intValue] != 0) 来检查它。那不是我的问题。我的问题是是否也可以像(item.id)一样检查,如果可以,为什么不呢?

对于字符串,我通常检查字符串长度,但对于数字,我的理解是,长度属性不可用。

【问题讨论】:

  • 你到底在问什么?检查属性是否为nil,如果不是,请检查其 intValue、floatValue 或其他
  • 这不是一个双重职位。另一个答案询问如何排除。我在很多地方都有这篇文章中的代码,并想检查它是否能检测出好的值……区别很微妙——它可能会让一些人感到困惑,因为它显然让你感到困惑。
  • if (_item.id != nil && [_item.id intValue] != 0) 是其他问题的建议解决方案,并且与此问题完全相同。

标签: ios objective-c null


【解决方案1】:

首先,您应该避免使用id 作为属性名称。例如,请参阅here

其次,objective-c 有一个特性:它允许向nil 实例发送消息。例如。如果item.idnilitem.id.whatever 将始终返回 nil(可以与 0 进行比较)。这意味着,您只需检查属性的floatValueif (item.id.floatValue != 0)

【讨论】:

  • 好的,如果 (item.id) 无法正常工作,我将把它放在上面的代码中?
  • 仅供参考,我的属性名称实际上是不同的。为简单起见,我只是使用了通用 item.id。
【解决方案2】:

你应该这样检查:

  if (![item.id isKindOfClass:[NSNull class]])

如果检查值是否为零

  if(item.id.floatValue != 0)

【讨论】:

  • isKindOfClass 的用例是什么?如果 NSNumber 实际上是 NSNull 你的代码应该会崩溃。
  • 如果你想比较一个对象类和另一个,你可以使用它。对于用例,我可以说,如果你想检查一个对象是否继承了一个特定的类,你可以使用它。
  • 是的,但是 NSNumber 不继承 NSNull 或相反。因此在这里没有任何用处。
  • 未初始化时为NSNull对象。去看看吧。
  • 不,这是完全错误的。如果没有初始化它是nil,它不是任何类。
猜你喜欢
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
相关资源
最近更新 更多