如何测试 Objective-C 中的原语是否为零?
我正在 iPhone 应用程序中进行检查 -
int var;
if (var != nil)
它可以工作,但在 X 代码中,这会生成警告“指针和整数之间的比较”。 我如何解决它?
我来自 Java 世界,我非常确定上面的语句在编译时会失败。
I'm doing a check in an iPhone application -
int var;
if (var != nil)
It works, but in X-Code this is generating a warning "comparison between pointer and integer." How do I fix it?
I come from the Java world, where I'm pretty sure the above statement would fail on compliation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
基元不能为
nil
。nil
是为 Objective-C 对象的指针保留的。nil
从技术上讲是一种指针类型,混合指针和整数而无需强制转换几乎总是会导致编译器警告,但有一个例外:将整数 0 隐式转换为指针而不用强制转换是完全可以的。投掷。如果要区分 0 和“无值”,请使用
NSNumber
类:Primitives can't be
nil
.nil
is reserved for pointers to Objective-C objects.nil
is technically a pointer type, and mixing pointers and integers will without a cast will almost always result in a compiler warning, with one exception: it's perfectly ok to implicitly convert the integer 0 to a pointer without a cast.If you want to distinguish between 0 and "no value", use the
NSNumber
class:欢迎来到 C 的奇妙世界。任何不等于整数 0 或空指针的值都是 true。
但是你有一个错误:整数不能为空。 它们是值类型,就像 Java 中一样。
如果你想“装箱”整数,那么你需要询问它的地址:
Welcome to the wonderful world of C. Any value not equal to the integer 0 or a null pointer is true.
But you have a bug: ints cannot be null. They're value types just like in Java.
If you want to "box" the integer, then you need to ask it for its address: