【问题标题】:iOS compare NSUInteger to NSIntegeriOS 将 NSUInteger 与 NSInteger 进行比较
【发布时间】:2014-03-17 20:00:49
【问题描述】:

我试图将数值相互比较,但我收到警告“比较不同符号的整数:'NSInteger'(又名'inti)和'NSUInteger'(又名'unsigned int')。

这是合乎逻辑的,因为我这样做了;)。但是我该如何解决这个警告。这是引发警告的代码:

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

Page 可以是 -1,所以它是一个 NSInteger,但 count 返回一个 NSUInteger。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    不要将 NSInteger 用于 page 和 -1,而是在使用 -1 的地方使用 NSUInteger 和 NSNotFound。

    那么你是在比较相同的类型。

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

    【讨论】:

    • 所以当我通过 -1 我应该通过 NSNotFound。是这个意思吗?
    • 是的,完全正确。您使用 -1 表示没有页面。而是使用 NSNotFound。
    • 我刚刚检查了当我通过 -1 时它自动是 NSNotFound 这是真的吗?
    • @MouNtant 您正在尝试将 NSUInteger 的值设置为 -1,这可能就是您获得 NSNotFound 的原因,因为这不是有效的操作。但是,它现在可能有效,但将来可能无效。如果您正在检查,最好明确返回 NSNotFound。
    • 不完全是,但有点像。如果将负数传递给无符号变量,它将循环。 NSNotFound 可以定义为 NSIntegerMax (这是 -1 可能循环到的),但这不能保证。所以通过 NSNotFound,如果更高版本的操作系统改变了 NSNotFound 的定义,你会很安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2015-10-26
    • 2011-11-29
    相关资源
    最近更新 更多