在比较 NSIndexPath 的行和 NSArray 计数时,是否有更好的方法来避免“符号比较”警告?

2023-12-28

我在 XCode 中为我的 iOS 项目打开了“签名比较”(又名 -Wsign-compare)警告(令人惊讶的是,默认情况下它是关闭的)。之后出现了很多这样的警告:

/Users/michalciuba/projects/GlobeMobile/Classes/ACMailController.m:86:19: Comparison of integers of different signs: 'NSInteger' (aka 'long') and 'NSUInteger' (aka 'unsigned long')

它们通常是由比较引起的row的财产NSIndexPath这是NSInteger的“count”方法返回的值NSArray, 像这样:

if(indexPath.row < [self.myDataArray count]) 

该警告可以通过强制转换简单地修复:

if(indexPath.row < (NSInteger)[self.myDataArray count]) 

然而,如果每个地方都对这些值进行比较,就必须这样做。他们正在几十个地方进行比较。 我想知道是否有更好更聪明的方法来解决这个问题?我不想关闭此警告,因为它可能有助于防止无符号整数下溢等问题。


您可以实现一个为您做这件事的类别:

@implementation NSArray (SignedCount)

- (NSInteger) signedCount
{
    NSInteger count = (NSInteger)[self count];
    return count;
}

@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在比较 NSIndexPath 的行和 NSArray 计数时,是否有更好的方法来避免“符号比较”警告? 的相关文章

随机推荐