Подтвердить что ты не робот

Совпадения NS_OPTIONS

Я пытаюсь реализовать следующий typedef

typedef NS_OPTIONS (NSInteger, MyCellCorners) {
    MyCellCornerTopLeft,
    MyCellCornerTopRight,
    MyCellCornerBottomLeft,
    MyCellCornerBottomRight,
};

и правильно присвоить значение с помощью

MyCellCorners cellCorners = (MyCellCornerTopLeft | MyCellCornerTopRight);

при рисовании моей ячейки, как я могу проверить, какая из опций соответствует, чтобы я мог правильно ее рисовать.

4b9b3361

Ответ 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){