iOS如何将NSUInteger与NSInteger进行比较

4

我正在尝试对两个数值进行比较,但是我收到了警告:“Comparison of integers of different signs: 'NSInteger' (aka 'inti) and 'NSUInteger' (aka 'unsigned int)'”。

这很正常,因为我就是在做这件事; )。但是我该如何修复此警告。以下是引发警告的代码:

if (page >= self.controllers.count || page < 0)
    return;

页面编号可能为-1,因此它是一个NSInteger类型,但count返回的是NSUInteger类型。

1个回答

8

在页面和-1的地方,使用NSUInteger和NSNotFound代替NSInteger。

这样你就可以比较相同类型的值。

if (page >= self.controllers.count || page == NSNotFound)
    return;

所以当我传递-1时,我应该传递NSNotFound。这是你的意思吗? - Haagenti
是的,没错。你正在使用 -1 来表示没有页面。相反使用 NSNotFound。 - Dave Wood
我刚刚检查了一下,当我传递-1时,它自动变成了NSNotFound,这是真的吗? - Haagenti
1
@MouNtant 你试图将一个 NSUInteger 的值设为 -1,这可能是你收到 NSNotFound 的原因,因为这不是一个有效的操作。然而,现在可能可以工作,但将来可能不行了。最好显式地返回 NSNotFound 如果这是你要检查的东西。 - Fogmeister
1
不完全一样,但有点类似。如果你将负数传递给无符号变量,它会绕回来。NSNotFound 可能被定义为 NSIntegerMax(这可能是-1回绕的结果),但这并不保证。因此,传递 NSNotFound,如果操作系统的后续版本更改了 NSNotFound 的定义,你就会安全。 - Dave Wood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接