2012-01-08 17 views
0

iOSアプリケーションでNSStringまたはNSNumberプロパティでオブジェクトを比較する複数の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(BOOLBoolean)と整数(intlongunsignedなど)は単なる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素敵なマクロ! –