2010-08-02 19 views

Respuesta

19

En primer lugar, declarar sus banderas en un encabezado:

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

typedef NSUInteger AZFruitFlags; 

El (1 << 0) a través de (1 << 3) representan simples bits en un número entero que puede enmascarar “ ” dentro y fuera de un entero. Por ejemplo, suponiendo NSUInteger es de 32-bits, y alguien ha elegido tanto Apple como durian, entonces el número entero se vería así:

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

Normalmente el método tiene que tomar un argumento entero sin signo:

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

¡Muchas gracias! Realmente ayudado. –

Cuestiones relacionadas