<<
- оператор битового сдвига. Так что 1 << 2
говорит ему сместить бит на два пробела.
Пример:
В двоичном виде число 1
равно:
0001
1 << 2
означает сдвинуть все биты влево на 2 пробела, что приводит к этому значению:
0100
или 4
.
Таким образом, значения каждого ENUM в вашем примере: 1, 2, 4, 8, 16 и т. Д. Они могли бы точно так же установить каждое перечисление на эти значения. Но поскольку они используют это перечисление для нескольких значений, двоичные значения делают его более понятным:
0001
0010
0100
1000
поэтому они написали, используя битовые сдвиги.
поэтому, если я ИЛИ (|
) два из этих значений вместе, например FlexibleLeftMargin
(0001
) и FlexibleWidth (0010
), я получу следующее значение:
0011
Поэтому они используют каждый бит как флаг, чтобы они знали, что у вас установлено несколько значений.
Теперь вы можете использовать оператор AND &
, чтобы выяснить, установлено ли у вас определенное значение.
0010 & 0011 = 0010
Таким образом, вы можете сделать это, чтобы проверить, установлено ли одно из перечислений:
myenum = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin);
if((myenum & UIViewAutoresizingFlexibleLeftMargin) == UIViewAutoresizingFlexibleLeftMargin) {
// myenum has UIViewAutoresizingFlexibleLeftMargin set!
}
Надеюсь, это имеет смысл.
Для более подробного объяснения побитовых операций прочитайте это: Википедия ~ Битовые операторы или поиск " битовых операторов "