将 NSNumber 与固定值进行比较?
Posted
技术标签:
【中文标题】将 NSNumber 与固定值进行比较?【英文标题】:compare a NSNumber with a fixed value? 【发布时间】:2010-03-11 19:51:07 【问题描述】:有没有更好的方法来比较一个 NSNumber 和一个固定的值,只是感觉有点笨拙。
if([myNumber isEqualToNumber:[NSNumber numberWithInt:0]]) NSLog(@"Zero");
我知道我可以使用 -compare 但它看起来几乎一样......
加里
【问题讨论】:
Obj-C 中的一切都感觉有点笨拙。 使用文字,还不错:[NSNumber isEqualToNumber:@0]
【参考方案1】:
if ([myNumber intValue] == 0)
怎么样? (显然是 )。
【讨论】:
我注意到这只有在已知数字是整数时才有效。值为 0.4 的 NSNumber 的 intValue 将为 0。【参考方案2】:NSNumber
对象可以包含整数、浮点数、双精度数等。
Ben 的方法(与 NSNumber
的 intValue
相比)非常快速且易于阅读,但只有当您可以保证 myNumber
始终在 int
的范围内时它才能正常工作(并且总是会是,即使在未来的代码更改之后)。
因此,如果您不知道myNumber
的确切类型,您的方法实际上会更好。
// This will work regardless if myNumber is an int, double etc.
[myNumber isEqualToNumber:[NSNumber numberWithInt:0]]
如果与较大的固定数字或浮点数相比,无论如何您都必须走这条路。 此外,如果您尝试创建类型错误的 NSNumber,最新版本的 Xcode 会正确警告您,这有助于及早发现问题:
【讨论】:
另一个微妙的错误来源是子类NSDecimalNumber
,它可以从intValue
产生错误的结果。 +1以上是关于将 NSNumber 与固定值进行比较?的主要内容,如果未能解决你的问题,请参考以下文章