2

ルールの辞書を作成しようとしています。キーは文字列で、値をビットマップに設定したいと思っています。

私は NS_OPTION を使用してアイテムをそのように宣言しています:

typedef NS_OPTIONS(NSInteger, PermittedDirection) {
  LeftDirection = 1 << 0,
  RightDirection = 1 << 1
};

typedef NS_OPTIONS(NSInteger, PermittedSize) {
  SmallSize = 1 << 0,
  MediumSize = 1 << 1,
  LargeSize = 1 << 2
};

私は自分のルール辞書を次のように定義しています:

 @property (atomic, strong) NSMutableDictionary * rules;

後で私はそれをそのようにインスタンス化します:

 self.rules = [[NSMutableDictionary alloc] init];

後でビットマスクを追加しようとすると(以下のように)、列挙型はオブジェクトへのポインターではないため、エラーが発生します。

    PermittedSize size = SmallSize | LargeSize;
    [self.rules setObject:size forKey:ALLOWED_FISH_SIZE];

後で値を取得するときにビットマスクを使用する機能を失うことなく、これらをラップする簡単な方法はありますか?

4

1 に答える 1

4

NSNumber次を使用してラップできます。

PermittedSize size = SmallSize | LargeSize;
self.rules[ALLOWED_FISH_SIZE] = @(size);

次に、それを取得するときに、値を箱から出します。

PermittedSize size = (PermittedSize) [self.rules[ALLOWED_FISH_SIZE] integerValue];
于 2013-11-04T03:21:59.227 に答える