Соглашение пространства имен для Objective-C - PullRequest
2 голосов
/ 19 ноября 2009

Я бы хотел сгруппировать классы, чтобы на них ссылались так:

Root.Web
Root.Mail
Root.Audio

Каждый из перечисленных классов соответствует файлу:

Web.h
Mail.h
Audio.h

Цель состоит в том, чтобы использовать приведенный выше синтаксис "Root", а не просто:

Audio myAudio = [[Audio alloc] init];

Вместо этого оно должно выглядеть так:

Root.Audio myAudio = [[Root.Audio alloc] init];

Может ли Objective-C это сделать?

Ответы [ 3 ]

7 голосов
/ 19 ноября 2009

Objective-c не поддерживает пространства имен (как c не поддерживает), поэтому вы не можете этого сделать. Чтобы избежать возможных конфликтов, вы можете добавить свой префикс к имени класса

Здесь и здесь - подобные вопросы, может быть, вы найдете их полезными.

Кстати, я думаю, что если пространства имен были поддержаны, они были бы адресованы больше как cpp (например, MyNamespace :: MyClass, а не MyNamespace.MyClass)

4 голосов
/ 19 ноября 2009

Насколько мне известно, для достижения цели в Objective-C (или C) нужно вместо этого использовать пространство имен.

RootAudio *myAudio = [[RootAudio alloc] init];
2 голосов
/ 19 ноября 2009

Хотя Objective-C может это сделать, если вы сделаете Root синглтоном с предварительно объявленными или динамически построенными свойствами, я действительно рекомендую против этого.

Это идет вразрез со стандартом Objective-C. Не следует использовать такой метод.

Каждый язык построен определенным образом и должен использоваться соответствующим образом. Вышесказанное не является целью использования объектива-c.

Почему вы хотите использовать его таким образом?

Если каждый объект может получить доступ к Root.Audio для воспроизведения файла, то почему бы не сделать Audio одноэлементным или использовать метод класса Audio, который может хранить и извлекать объявленные вами экземпляры? Каждый объект во время выполнения может обращаться к методам класса.

...