J'essaie de créer une méthode avec un format similaire à la méthode setAutoresizingMask: de NSView. Je veux que quelqu'un puisse spécifier plusieurs valeurs que j'ai déclarées dans mon énumération (NSHeightSizable | NSWidthSizable) comme dans le masque autoresizing. Comment puis-je faire ceci?Utilisation de plusieurs enumérations NSUInteger en tant que paramètre d'une méthode
6
A
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
}
}
Merci beaucoup! Vraiment aidé. –