2010-08-02 9 views

Antwort

19

Zuerst erklären Sie Ihre Flaggen in einem Header:

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

typedef NSUInteger AZFruitFlags; 

Die (1 << 0) durch (1 << 3) einzelne Bits in einer ganzen Zahl darstellen, die Sie “ ” in und aus einer ganzen Zahl maskieren können. Zum Beispiel NSUInteger 32 Bits unter der Annahme, und jemand hat beide gewählt Apfel und Durian, dann würde die ganze Zahl wie folgt aussehen:

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

Normalerweise braucht Ihre Methode ein unsigned integer Argument nehmen:

- (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

Vielen Dank! Wirklich geholfen. –