Здравствуйте, хабражители! Дело в том, что давольно часто встречал негодование программистов, перешедших с Java/C# на Objective-C или программирующих одновременно под различные платформы.Связаны эти негодование с отсутствием обобщений или Generics.И все сразу опускают руки, т.к к обобщенному коду все уже привыкли и вроде без него никак.А статья как раз о том, что можно вполне использовать все плюшки Generics на Objective-C.
Для этого нам понадобится маленькая библиотечка, которую даже библиотечкой назвать трудно, скорее просто расширение.Есть она и просто в Github и что особенно радует в CocoaPods.В гитхабе можно скачать по сслыке Objective-C-Generics.Но я советую использовать CocoaPods, если уж библиотека там есть.
Добавляем в наш проект Podfile. Добавляем в него следующие строки:
Переходим из консоли в каталог с проектом и запускаем команду pod install, дожидаемся окончания.Все, теперь все вкусности Generics у нас в кармане.
Теперь попробуем использовать возможности обобщенного программирование под iOS.Создадим класс шаблона Template.h с содержимым:
Далее для использования в любом ViewController импортируем Template.h и пробуем использовать:
При попытке скомпилировать проект на строчке:
Получаем уведомление о несовместимости типов.Изменяем код на рабочий:
Результат работает прекрасно.Вся сила и возможности обобщенного программирования теперь и в 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, немного под другим углом конечно, но использовать вполне можно.