Сравнение NSInteger и NSUInteger - PullRequest
0 голосов
/ 05 июля 2018

У меня есть две переменные, которые мне нужно сравнить, чтобы проверить, существует ли индекс в массиве: indexPath.row - NSInteger [self arrayOfData].count - это NSUInteger

Проблема в том, что они бывают разных типов, и когда indexPath.row = - 1, он автоматически преобразуется в 18446744073709551615 (длинный без знака), чего я и стараюсь избегать.

Как проверить, существует ли индекс, определенный строкой NSIndexPath в NSArray?

Код:

- (void) checkIfIndexExists:(NSIndexPath*) indexPath inArray:(NSArray*)arrayOfData {
    if (indexPath.row >= [self arrayOfData].count) {  // indexPath.row=-1 gets interpretted as 18446744073709551615 (unsigned long)
        DDLogDebug(@"Warning: Index doesn't exist {%@}", indexPath);
        return;
    }
}

1 Ответ

0 голосов
/ 06 июля 2018

Вот как я решил проблему, приведя unsigned long к long

- (void) checkIfIndexExists:(NSIndexPath*) indexPath inArray:(NSArray*)arrayOfData {
    if (indexPath.row >= (long) [self arrayOfData].count) {  // indexPath.row=-1 gets interpretted as 18446744073709551615 (unsigned long)
        DDLogDebug(@"Warning: Index doesn't exist {%@}", indexPath);
        return;
    }
}
...