Pull to refresh

Generics в Objective-C

Здравствуйте, хабражители! Дело в том, что давольно часто встречал негодование программистов, перешедших с Java/C# на Objective-C или программирующих одновременно под различные платформы.Связаны эти негодование с отсутствием обобщений или Generics.И все сразу опускают руки, т.к к обобщенному коду все уже привыкли и вроде без него никак.А статья как раз о том, что можно вполне использовать все плюшки Generics на Objective-C.
Для этого нам понадобится маленькая библиотечка, которую даже библиотечкой назвать трудно, скорее просто расширение.Есть она и просто в Github и что особенно радует в CocoaPods.В гитхабе можно скачать по сслыке Objective-C-Generics.Но я советую использовать CocoaPods, если уж библиотека там есть.

Установка:


Добавляем в наш проект Podfile. Добавляем в него следующие строки:
platform :ios, "7.0"
target "Generics" do
pod 'Objective-C-Generics', '~> 0.0.1'
end
target "GenericsTests" do
end


Переходим из консоли в каталог с проектом и запускаем команду pod install, дожидаемся окончания.Все, теперь все вкусности Generics у нас в кармане.

Использование:


Теперь попробуем использовать возможности обобщенного программирование под iOS.Создадим класс шаблона Template.h с содержимым:
#import <Foundation/Foundation.h>
#import <ObjectiveCGenerics.h>
GENERICSABLE(Template)

@interface Template : NSObject<Template>

@property (nonatomic, strong) NSString* name;

@end


Далее для использования в любом ViewController импортируем Template.h и пробуем использовать:
  Template *tmp=[[Template alloc]init];
    NSMutableArray<Template> *results = [NSMutableArray array];
    [results addObject:tmp];
    NSString *str = results[0];

При попытке скомпилировать проект на строчке:
 NSString *str = results[0];

Получаем уведомление о несовместимости типов.Изменяем код на рабочий:
Template *str = results[0];

Результат работает прекрасно.Вся сила и возможности обобщенного программирования теперь и в Objective-C, немного под другим углом конечно, но использовать вполне можно.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.