Обычно такое определение enum
указывает, что это битовая маска . Каждый член перечисления имеет уникальное значение, но также имеет только один установленный бит, а это означает, что при объединении нескольких значений вы все равно сможете определить, какие из них были предоставлены, просто посмотрев, какие биты установлены.
Например, предположим, что это 32-разрядное целое число, представленное в двоичном виде:
0000 0000 0000 0000 0000 0001 0000 0000
Устанавливается 8-й бит, который соответствует значению enum NSBinarySearchingFirstEqual
, поскольку значение 1, сдвинутое на 8 бит влево, в конечном итоге становится 8-м битом (при условии, что вы упорядочиваете биты с 0)
0000 0000 0000 0000 0000 0101 0000 0000
Это предыдущее 32-разрядное целое число имеет 2 установленных бита: 8-й и 10-й. Эти два бита соответствуют NSBinarySearchingFirstEqual
и NSBinarySearchingInsertionIndex
.
Если вы не знакомы со сдвигом битов, взгляните на статью Википедии , в которой есть несколько полезных диаграмм.
Определение типа означает, что NSBinarySearchingOption
имеет тип NSUInteger
. По сути, это одно и то же, но определив другой тип, становится понятнее, какие значения следует предоставлять методу, который принимает аргумент этого типа.