Есть ли лучший способ избежать предупреждения "Сравнение знаков" при сравнении строки NSIndexPath и счетчика NSArray?
Я включил предупреждения 'Signed Comparision' (aka -Wsign-compare) для своего проекта iOS в XCode (поразительно, по умолчанию он был отключен). После этого появилось много предупреждений:
/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])
Тем не менее, это должно быть сделано, если каждое место, где сравниваются такие значения. И их сравнивают в десятках мест. Интересно, есть ли лучший и более умный способ решить эту проблему? Я не хочу отключать это предупреждение, потому что оно может помочь предотвратить такие проблемы, как недопустимое целочисленное значение без знака.
1 ответ
Вы можете создать категорию, которая сделает это за вас:
@implementation NSArray (SignedCount)
- (NSInteger) signedCount
{
NSInteger count = (NSInteger)[self count];
return count;
}
@end