Максимальное (побитовое) ограничение перечисления Objective-c (iphone) - PullRequest
2 голосов
/ 16 ноября 2011

У меня есть список вызовов, которые я могу сделать веб-сервису, определенному как перечисление

typedef enum
{
    ServiceCallGetDataA = 1 << 1;
    ServiceCallGetDataB = 1 << 2;
    ServiceCallGetDataC = 1 << 3;
    ServiceCallGetDataD = 1 << 4;
    ..
} ServiceCall;

это делается побитово, поэтому, если я позвоню своему менеджеру сервиса, я могу просто сказать

[ServiceManager getDataFor:( ServiceCallGetDataB | ServiceCallGetDataC )];

Который затем дает мне обе данные для службы B & C.Все работает отлично.

, но я могу определить только 32 перечисления, потому что платформа iOS, для которой я разрабатываю, является 32-разрядной.

Основная цель - сохранить операцию OR без изменений, чтобы я мог получить/ установить мое перечисление с помощью операции ИЛИ.

есть идеи?

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Вы также можете попробовать использовать битовые векторы вместо простого перечисления.Как было предложено, когда я отправил этот вопрос , вы можете использовать CFMutableBitVector для реализации битовых векторов произвольных размеров.

0 голосов
/ 16 ноября 2011

Если вам нужны большие целые числа, вы можете использовать тип long long, который даже в iOS должен переводиться в 64-битные целые числа.

В качестве альтернативы вы можете использовать NSSet переменные с константными строками для каждого сервиса.Затем вы можете объединить их, проверить, содержатся ли объекты и т. Д. Если скорость критична, это может быть не вариант, но если эти функции используются не слишком часто, вы получите гораздо большую гибкость таким образом.

...