Ich versuche, eine Methode mit einem ähnlichen Format wie die setAutoresizingMask: -Methode von NSView zu erstellen. Ich möchte, dass jemand in der Lage ist, mehrere Werte anzugeben, die ich in meiner Enum (NSHeightSizable | NSWidthSizable) wie in der Autorisierungsmaske deklariert habe. Wie kann ich das machen?Mehrere NSUInteger-Enums als Parameter für eine Methode verwenden
6
A
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
}
}
Vielen Dank! Wirklich geholfen. –