Есть ли лучший способ избежать предупреждения "Сравнение знаков" при сравнении строки 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
Другие вопросы по тегам