2010-08-02 14 views

Répondre

19

Tout d'abord, déclarer vos drapeaux dans un en-tête:

enum 
{ 
    AZApple = (1 << 0), 
    AZBanana = (1 << 1), 
    AZClementine = (1 << 2), 
    AZDurian = (1 << 3) 
}; 

typedef NSUInteger AZFruitFlags; 

Le (1 << 0) jusqu'à (1 << 3) représentent des bits uniques dans un nombre entier que vous pouvez masquer “ ” dans et hors d'un entier. Par exemple, en supposant NSUInteger est de 32 bits, et que quelqu'un a choisi à la fois Apple et durian, l'entier ressemblerait à ceci:

0000 0000 0000 0000 0000 0000 0000 1001 
            | |- Apple bit 
            |---- Durian bit 

Généralement votre méthode doit prendre un argument entier non signé:

- (void) doSomethingWithFlags:(AZFruitFlags) flags 
{ 
    if (flags & AZApple) 
    { 
     // do something with apple 

     if (flags & AZClementine) 
     { 
      // this part only done if Apple AND Clementine chosen 
     } 
    } 

    if ((flags & AZBanana) || (flags & AZDurian)) 
    { 
     // do something if either Banana or Durian was provided 
    } 
} 
+0

Merci beaucoup! Vraiment aidé. –