Шаблон в Objective C? - программирование
Подтвердить что ты не робот

Шаблон в Objective C?

Все в заголовке:)

Есть ли в ObjC шаблоны?

Мне нужен эквивалент С#:

public class MyClass<T> : Message

в ObjC.

Любые подсказки будут сильно благодарны:(

4b9b3361

Ответ 1

Нет такой функции ObjC. Хотя ObjС++ существует, я решительно отвергаю его широкое использование. У этого есть много проблем от плохой поддержки инструмента и отладчика, к плохой оптимизации компилятора, к ухудшенной производительности ARC.

Обычно в ObjC шаблоны не требуются, потому что это не строго типизированный язык. NSArray может содержать любой объект, поэтому вам не нужно использовать шаблон для получения нужного типа. У вас есть конкретная проблема, которую вы пытаетесь решить? Вероятно, существует лучшее решение ObjC.

Ответ 2

Obj-C поддерживает шаблоны с Xcode v7. Он называется generics:

Легкие дженерики теперь позволяют вам указывать информацию о типе для классы сбора, такие как NSArray, NSSet и NSDictionary. Тип информация улучшает доступ Swift при переходе от Objective-C, и упрощает код, который вы должны написать. Например:

NSArray<UIImage *> *images; 
NSDictionary<NSString *, NSURL *> *resourcesByName;

Ищите "Objective-C Изменения языка" в разделе https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html

Ответ 3

Кстати, Xcode поддерживает добавление классов С++ через New- > File. Использование extern "C" {} конструкции в С++ означает, что вы можете предоставить как можно больший или маленький C-вызываемый интерфейс по мере необходимости, который вы можете вызвать непосредственно из вашего кода Objective-C, так как Objective-C является надмножеством C.

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