Совпадения NS_OPTIONS
Я пытаюсь реализовать следующий typedef
typedef NS_OPTIONS (NSInteger, MyCellCorners) {
MyCellCornerTopLeft,
MyCellCornerTopRight,
MyCellCornerBottomLeft,
MyCellCornerBottomRight,
};
и правильно присвоить значение с помощью
MyCellCorners cellCorners = (MyCellCornerTopLeft | MyCellCornerTopRight);
при рисовании моей ячейки, как я могу проверить, какая из опций соответствует, чтобы я мог правильно ее рисовать.
Ответы
Ответ 1
Правильный способ проверить это значение - сначала поразрядное И значения, а затем проверить равенство на требуемое значение.
MyCellCorners cellCorners = MyCellCornerTopLeft | MyCellCornerTopRight;
if ((cellCorners & MyCellCornerTopLeft) == MyCellCornerTopLeft) {
// top left corner set
}
В следующей ссылке объясняется, почему это правильно, и дает другое представление о перечисленных типах.
Ссылка: checking-for-a-value-in-a-bit-mask
Ответ 2
Использовать маскирование бит:
typedef NS_OPTIONS (NSInteger, MyCellCorners) {
MyCellCornerTopLeft = 1 << 0,
MyCellCornerTopRight = 1 << 1,
MyCellCornerBottomLeft = 1 << 2,
MyCellCornerBottomRight = 1 << 3,
};
MyCellCorners cellCorners = MyCellCornerTopLeft | MyCellCornerTopRight;
if (cellCorners & MyCellCornerTopLeft) {
// top left corner set
}
if (etc...) {
}
Ответ 3
Я согласен с NSWill. Недавно у меня была аналогичная проблема с неправильным сравнением.
Правило if должно быть:
if ((cellCorners & MyCellCornerTopLeft) == MyCellCornerTopLeft){