如何比较两个NSInteger?

8

我们如何比较两个NSInteger数字?我有两个NSIntegers,用常规方法比较它们并不起作用。

if (NSIntegerNumber1 >= NSIntegerNumber2) {
    //do something
}

即使第一个值是13,第二个值是17,if循环仍然执行。
有什么想法吗?

1
这就是你要做的。仔细检查它们的值:在“if”之前设置一个断点,确保它们符合你的预期。 - jscs
NSInteger是int的别名,所以它应该可以工作。 否则,请指定NSIntegerNumber1变量的类型。 - Inder Kumar Rathore
你确定这些是NSInteger类型的数字吗?我猜这些应该是NSNumbers,而你正在尝试比较指针。 - SVGreg
1
确保在调试时使用 p 而不是 po,这就是解决我的问题的方法。 - yoshyosh
为什么p能够理解类型,而po不行呢?如果po不知道类型,为什么它会打印出一个看起来有效的值呢?无论原因是什么,这都帮助我找到了潜在的问题。 - owenfi
4个回答

13

NSInteger只是一个内置整型类型的typedef(例如intlong)。

使用 a == b 进行比较是安全的。

其他常见运算符的行为是可预测的:!=<=<>= 等。

最后,NSInteger的底层类型因平台/架构而异。不能安全地假定它总是32位或64位。


这篇文章应该被投票支持,因为它解释了推理过程。 - Ali Saeed

12

既然你的变量名中包含了Integer和Number,那么你可能已经将这两个值声明为NSNumber而不是NSInteger。如果是这样的话,你需要执行以下操作:

 if ([NSIntegerNumber1 intValue] >= [NSIntegerNumber2 intValue]) {
      // do something
 }
不需要进行任何更改,它应该可以正常工作!

9
NSInteger int1;
NSInteger int2;

int1 = 13;
int2 = 17;

if (int1 > int2)
{
    NSLog(@"works");
}

2

当比较整数时,使用此方法将完全有效:

int a = 5;
int b = 7;

if (a < b) {

NSLog(@"%d is smaller than %d" a, b);   

}

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