Итак, во время ввода вопроса у меня случился взрыв мозга, но, поскольку я впервые провел некоторые поиски и не нашел ничего полезного, я подумал, что все равно опубликую.
Это работает, только если выпытаемся проверить взаимоисключающее подмножество опций.Т.е. я упомянул, что мои первые несколько битов определяют тип или категорию.В пределах определения наборов опций у вас есть возможность определить некоторые другие значения.Здесь я добавляю опцию 'allTypes', которая охватывает все биты, определяющие типы.
typedef NS_OPTIONS(NSInteger, kPropertyState) {
kTypeNone = 0,
kType1 = 1,
kType2 = 1 << 1,
kType3 = 1 << 2,
kState1 = 1 << 3,
kState2 = 1 << 4,
// ... ... ...
kAllTypes = kType1 | kType2 | kType3
};
Затем, когда я хочу выполнить проверку регистра переключателя для типа, я могу сделать это:
kPropertyState propertyState = // ... Однако это было получено
switch( propertyState & .kAllTypes ) {
case kType1: // ...
case kType2: // ...
case kType3: // ...
default: // . . .
}
Просто используйте побитовый код и изолируйте биты.Поскольку эти биты являются взаимоисключающими друг от друга, вам не нужно беспокоиться о других битах, отбрасывающих проверки регистра.Кроме того, помещая побитовое и внутри оператора switch, мой propertyState
фактически не изменяется, и у меня все еще есть доступ к другим битам состояния внутри соответствующих блоков case.