如何测试 Objective-C 中的原语是否为零?

发布于 2024-07-20 05:53:12 字数 174 浏览 6 评论 0原文

我正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

此生挚爱伱 2024-07-27 05:53:12

基元不能为nilnil 是为 Objective-C 对象的指针保留的。 nil 从技术上讲是一种指针类型,混合指针和整数而无需强制转换几乎总是会导致编译器警告,但有一个例外:将整数 0 隐式转换为指针而不用强制转换是完全可以的。投掷。

如果要区分 0 和“无值”,请使用 NSNumber 类:

NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil)  // compare against nil
    ;  // do one thing
else if([num intValue] == 0)  // compare against 0
    ;  // do another thing

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:

NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil)  // compare against nil
    ;  // do one thing
else if([num intValue] == 0)  // compare against 0
    ;  // do another thing
清风夜微凉 2024-07-27 05:53:12
if (var) {
    ...
}

欢迎来到 C 的奇妙世界。任何不等于整数 0 或空指针的值都是 true。

但是你有一个错误:整数不能为空。 它们是值类型,就像 Java 中一样。

如果你想“装箱”整数,那么你需要询问它的地址:

int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0;  // This is setting "the box" to null,
                  //  NOT setting the integer value
if (var) {
    ...
}

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:

int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0;  // This is setting "the box" to null,
                  //  NOT setting the integer value
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文