6

NSViewのsetAutoresizingMask:メソッドと似た形式のメソッドを作ろうとしています。自動サイズ変更マスクのように、列挙型 (NSHeightSizable | NSWidthSizable) で宣言した複数の値を誰かが指定できるようにしたいと考えています。これどうやってするの?

4

1 に答える 1

19

まず、ヘッダーでフラグを宣言します。

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

typedef NSUInteger AZFruitFlags;

整数内外で「マスク」できる整数内の単一ビットを表すスルー(1 << 0)(1 << 3)たとえば、NSUIntegerが 32 ビットで、誰かがリンゴとドリアンの両方を選択した場合、整数は次のようになります。

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

通常、メソッドは符号なし整数引数を取る必要があります。

- (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
    }
}
于 2010-08-02T23:09:36.570 に答える