Синонимы протокола в Objective-C? - PullRequest
0 голосов
/ 10 декабря 2010

Я почти уверен, что это невозможно, но мне интересно, есть ли у кого-то более знающего об Objective-C другая идея. Причина, по которой я сомневаюсь, что это сработает, заключается в том, что, хотя это возможно при страшном хакерстве во время выполнения, я сомневаюсь, что компилятор сможет понять.

Меня интересует, возможно ли иметь протокол, который взаимозаменяем с другим:

 // let <ShortName> be a synonym for <NSReallyReallyLongName>
 id <ShortName> obj = [NSSomething objectConformingtoReallyReallyLongProtocolName];

По сути, я хотел бы обобщить мой API, чтобы он брал объекты, которые соответствуют <NSReallyReallyLongName>, но я бы хотел, чтобы и я, и потребители моего API не приходилось так много печатать. Одним из возможных решений является typedef:

typedef id <NSReallyReallyLongName> ShortName;

Но для потребителей API становится менее понятно, что я устанавливаю ограничение на основе протокола. Есть идеи?

Обновление:

Я чувствую себя немного глупо, увидев действительно простое решение в ответах ниже. Спасибо за юмор.

Ответы [ 3 ]

4 голосов
/ 10 декабря 2010
#define ShortName LongName
1 голос
/ 10 декабря 2010

Не пробовал это, но как насчет протокола короткого имени, содержащего определения сообщения, и протокола длинного имени, расширяющего его без новых определений сообщения.Поскольку короткое имя является родителем, все, что возвращает экземпляр длинного имени, не должно вызывать проблем, и ваши пользователи могут использовать короткое имя.

Но с точки зрения KISS и т. Д. Я действительно рекомендую вам переосмыслить иизбегать всей этой идеи в целом.Это скорее смущает, чем помогает.

0 голосов
/ 10 декабря 2010

Вы также можете попробовать @compatibility_alias, хотя это может быть только для классов.

...