Константы Objective C в протоколе - PullRequest
0 голосов
/ 11 января 2011

В моем проекте target-c у меня есть протокол, подобный следующему:

@protocol MyProtocol

-(id) get:(NSString *) key;

-(void) set:(NSString *) key withValue:(id) value;

-(NSValue *) getSize;

-(void) setSize:(NSValue *) value;

-(NSValue *) getBounds;

-(void) setBounds:(NSValue *) value;

@end

OBJC_EXPORT const NSString *MYPROTOCOL_SIZE;
OBJC_EXPORT const NSString *MYPROTOCOL_BOUNDS;

И в основном эти конкретные методы (getSize, getBounds, setSize, setBounds)Предполагается, что значение, которое предполагается хранить в MYPROTOCOL_SIZE и MYPROTOCOL_BOUNDS, соответственно.

Однако я не могу найти эффективный способ задания этих константных строк, объединяя результаты других методов, потому что этовыдает ошибку: initializer element is not constant, когда я пытаюсь установить их напрямую.Есть ли способ, которым я могу гарантировать, что объекты всегда будут инициализированы.(например, в методе load классов), без необходимости вручную вызывать код при запуске моей программы?

1 Ответ

0 голосов
/ 12 января 2011

Ну, во-первых, вы должны изучить соглашение об именах, для аксессоров у вас есть - (Тип);и - (void) set: (Type) значение;тогда как в вашем случае вы сделали: - (Тип) получить;и - (void) set: (Type) value;

Я советую вам использовать @property и для аксессоров вашего размера и границ.

Теперь о "const" в объявлении переменной NSStringЭто не имеет смысла.Const применяется к типу слева и, если он находится в начале строки, он применяется к токену непосредственно справа.Итак, у вас есть «const NSString», который не имеет смысла, потому что NSString уже неизменен, и отправка мутирующих сообщений в const-объект не выдает никаких предупреждений или ошибок…want это "NSString * const", в котором говорится, что указатель на ваш NSString является константой, вы можете назначить его только при инициализации, и тогда он не изменится ...

Теперь о протоколе ...уверен, что вы хотите протокол в вашем случае?А не абстрактный класс, в котором ваши 2 NSString будут доступны только для чтения?

...