Сравнение логических и целых чисел - PullRequest
0 голосов
/ 08 января 2012

Я использую несколько NSComparators в своем приложении для iOS, которые сравнивают объекты по свойствам NSString или NSNumber.Это довольно просто, потому что NSString имеет caseInsensitiveCompare:, а NSNumber имеет compare:.Как мне сравнить bools или ints?Для логических значений код может запутаться довольно быстро, так как мои функции сравнения принимают параметр (bool)ascending.Я заметил, что Objective C часто имеет неясные глобальные функции для такого типа вещей.

В настоящее время я использую этот код для сравнения логических значений:

NSComparator comp = ^(id id1, id id2) {
    ListItem *comp1 = nil, 
             *comp2 = nil;
    if([id1 isKindOfClass:[ListItem class]]){
        if(ascending){
            comp1 = (ListItem*)id1;
            comp2 = (ListItem*)id2;
        }else{
            comp1 = (ListItem*)id2;
            comp2 = (ListItem*)id1;
        }
    } 
    if(h1!=nil && h2!=nil){
        if((h1.isInBasket && h2.isInBasket) || (!h1.isInBasket && !h2.isInBasket)){
            return 0;
        } else if(h1.isInBasket && !h2.isInBasket) {
            return 1;
        } else {
            return -1;
        }
    } else {
        return 0;
    }

}

1 Ответ

2 голосов
/ 08 января 2012

Bools (BOOL, Boolean) и целые числа (int, long, unsigned и т. Д.) Являются простыми целочисленными типами C, и вы сравниваете их со стандартными операторами сравнения C < , >, == и т. Д. То же самое относится к char (также целочисленный тип), float и т. Д. И к именованным вариантам, таким как NSInteger.

...