Всем привет!
Не секрет, что мы, программисты, минимум половину времени тратим на написание кода. Логично было бы это время как можно лучше сократить.
Однажды, когда я в очередной раз написал конструкцию
NSString *
, я подумал, что пора что-то менять.Как же можно упростить себе жизнь, разрабатывая под iOS?
Статья является расширением другой статьи
Литералы
Не так давно, Objective-c стал поддерживать большое количество литералов для уменьшения объема кода.
Все примеры будут актуальны для Xcode 4.5.
Итак, заменяем следующие конструкции на сжатые аналоги:
[NSArray arrayWithObjects:@"1", @"2", @"3", nil] => @[@"1", @"2", @"3"]; [NSDictionary dictionaryWithObjects:@"1", @"2", @"3", nil forKeys:@"one", @"two", @"three", nil] => @{@"one" : @"1", @"two" : @"2", @"three" : @"3"}
Следите, чтобы объекты были не nil, иначе получите исключения.
Продолжаем
[NSNumber numberWithChar:'A'] => NSNumber *theA = @'A'; //Целые [NSNumber numberWithInt:42] => NSNumber *fortyTwo = @42; [NSNumber numberWithUnsignedInt:42U] => NSNumber *fortyTwoUnsigned = @42U; [NSNumber numberWithLong:42L] => NSNumber *fortyTwoLong = @42L; [NSNumber numberWithLongLong:42LL] => NSNumber *fortyTwoLongLong = @42LL; //С плавающей точкой [NSNumber numberWithFloat:3.141592654F] => NSNumber *piFloat = @3.141592654F; [NSNumber numberWithDouble:3.1415926535] => NSNumber *piDouble = @3.1415926535; //Булевые [NSNumber numberWithBool:YES] => NSNumber *yesNumber = @YES; [NSNumber numberWithBool:NO] => NSNumber *noNumber = @NO;
Аналогично можно задавать объекты из переменных. Просто возьмите их в скобки @()
Дальше интереснее!
NSMutableArray * array = [@[@"1", @"2", @"3"] mutableCopy] ; [array objectAtIndex:0] => array[0]; array[0] = @"5"; NSMutableDictionary *dictionary = [@{@"one" : @"1", @"two" : @"2", @"three" : @"3"} mutableCopy]; NSString *key = @"one"; oldObject = dictionary[key]; dictionary[key] = newObject;
В общем, тонна синтаксического сахара.
Макросы
Можно по-разному относиться к макросам, однако же, они могут хорошо ускорить разработку.
Привожу список интересных макросов, подходящих для разработки:
#define ApplicationDelegate ((MyAppDelegate *)[[UIApplication sharedApplication] delegate]) #define UserDefaults [NSUserDefaults standardUserDefaults] #define SharedApplication [UIApplication sharedApplication] #define Bundle [NSBundle mainBundle] #define MainScreen [UIScreen mainScreen] #define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES #define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO #define NetworkActivityIndicatorVisible(x) [UIApplication sharedApplication].networkActivityIndicatorVisible = x #define NavBar self.navigationController.navigationBar #define TabBar self.tabBarController.tabBar #define NavBarHeight self.navigationController.navigationBar.bounds.size.height #define TabBarHeight self.tabBarController.tabBar.bounds.size.height #define ScreenWidth [[UIScreen mainScreen] bounds].size.width #define ScreenHeight [[UIScreen mainScreen] bounds].size.height #define TouchHeightDefault 44 #define TouchHeightSmall 32 #define ViewWidth(v) v.frame.size.width #define ViewHeight(v) v.frame.size.height #define ViewX(v) v.frame.origin.x #define ViewY(v) v.frame.origin.y #define SelfViewWidth self.view.bounds.size.width #define SelfViewHeight self.view.bounds.size.height #define RectX(f) f.origin.x #define RectY(f) f.origin.y #define RectWidth(f) f.size.width #define RectHeight(f) f.size.height #define RectSetWidth(f, w) CGRectMake(RectX(f), RectY(f), w, RectHeight(f)) #define RectSetHeight(f, h) CGRectMake(RectX(f), RectY(f), RectWidth(f), h) #define RectSetX(f, x) CGRectMake(x, RectY(f), RectWidth(f), RectHeight(f)) #define RectSetY(f, y) CGRectMake(RectX(f), y, RectWidth(f), RectHeight(f)) #define RectSetSize(f, w, h) CGRectMake(RectX(f), RectY(f), w, h) #define RectSetOrigin(f, x, y) CGRectMake(x, y, RectWidth(f), RectHeight(f)) #define DATE_COMPONENTS NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit #define TIME_COMPONENTS NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit #define FlushPool(p) [p drain]; p = [[NSAutoreleasePool alloc] init] #define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0] #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
Засуньте их в один заголовочный файл и подключите в <project_name>-Prefix.pch
. После этого используйте их в коде. Весьма удобно
Переопределения типов
Прежде всего, переопределения типов я использую, чтобы отойти от звезд и префиксов NS. Главное, попривыкнуть к ним.
Вот несколько, например:
typedef NSString* String; typedef NSNumber* Number; typedef NSArray* Array; typedef NSMutableArray* MutableArray; typedef NSDictionary* Dictionary; typedef NSMutableDictionary* MutableDictionary;
Заключение
В общем, поверхностное ознакомление мы осуществили. Упрощайте себе работу, и не пишите лишних символов (но не забывайте о логичных названиях переменных!!!)
Удачи в разработке
ссылка на оригинал статьи http://habrahabr.ru/post/159115/
Добавить комментарий