<< в UITableView Enum - PullRequest
       28

<< в UITableView Enum

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Значения перечисления дают имена битам, которые должны использоваться в битовой маске.Биты в битовой маске по значению равны 1, 2, 4, 8, 16, ... (степени двух).Эти значения могут быть более четко показаны с помощью выражений (1 << 0, 1 << 1, 1 << 2, 1 << 3) - т.е.1 сдвинут влево на 0, 1, ... мест.Это явно и менее подвержено ошибкам, чем перечисление степеней 2 в виде десятичных констант. </p>

Когда вы используете значения, они обычно объединяются с использованием операции побитового ИЛИ ('|').Цель состоит в том, чтобы указать ноль или более битов, каждый из которых имеет конкретное значение.Использование битовой маски позволяет указывать их независимо, но компактно.Вы можете прочитать больше о битовых масках для более подробной информации и примеров.

2 голосов
/ 24 марта 2012

Пост, который вы связали, объясняет почему довольно ясно. Оператор << в C сдвигает числа, оставленные на указанное количество битов. Сдвигая 1 в каждый столбец, легко увидеть, что параметры перечисления могут быть побитово ИЛИ вместе. Это позволяет комбинировать опции enum, используя | оператор и удерживается в одном целом числе. Это не сработало бы, если бы объявление enum было следующим:

enum {
     UITableViewCellStateDefaultMask                     = 0, (= 00 in binary)
     UITableViewCellStateShowingEditControlMask          = 1, (= 01 in binary)
     UITableViewCellStateShowingDeleteConfirmationMask   = 2, (= 10 in binary)
     UITableViewCellStateThatIJustMadeUpForThisExample   = 3  (= 11 in binary)
};

Поскольку в двоичном виде 3 = 11, невозможно узнать из одного целого числа, есть ли у вас состояние UITableViewCellStateThatIJustMadeUpForThisExample или UITableViewCellStateShowingEditControlMask ИЛИ с UITableViewCellStateShowingDeleteConfirmationMask.

...