2012-01-08 16 views
0

NSString 또는 NSNumber 속성으로 개체를 비교하는 iOS 앱에서 여러 NSComparator를 사용합니다. 이것은 NSString이 caseInsensitiveCompare:이고 NSNumber가 compare:이므로 매우 쉽습니다. bool이나 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; 
    } 

}

+3

=,! =, <, >? =) – jrturton

답변

2

Bools (BOOL, Boolean) 및 정수 (int, long, unsigned 등) 통합 그냥 일반 C입니다

현재 나는 논리 값을 비교하기 위해이 코드를 사용하고 있습니다 표준 C 비교 연산자 <, >, == 등과 비교하십시오. char (정수형도 마찬가지 임), float 등등과 같으며 이름 d 변형 (예 : NSInteger).

+0

그건 내가 바라던 것이 아니지만 고마워. 원래 게시물에 코드를 추가했습니다. 불행히도 내 부울 대수학은 녹슬 었어. – Echilon

+1

간단한 방법을 원한다면 다음 매크로가 트릭을 수행해야합니다 :'#define COMPARE (A, B) ({__typeof __ (A) __a = (A); __typeof __ (B) __b = (B); __a – CRD

+0

@CRD nice 매크로! 두 번째 비교에서 b 다음에 닫는 괄호가 없습니다. –