ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

Литералы

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

<code data-result="[object Object]">NSArray *a3 = [NSArray arrayWithObject:@"An object"];</code>

или вот так:

<code data-result="[object Object]">NSArray *girls = [NSArray arrayWithObjects:@"Amanda", @"Ira", @"Natali", nil];
NSArray *boys = [NSArray arrayWithObjects:@"Sergei", @"Vova", @"Ivan", nil];
NSDictionary *children = [NSDictionary dictionaryWithObjectsAndKeys:girls, @"girls", boys, @"boys", nil];</code>

А позже, в уроке Раскрывающаяся таблица Вы могли увидеть следующую запись:

 

<code data-result="[object Object]">self.students = @[girlsSection, boysSection];</code>

Подробнее об этой и подобных записях пойдет речь в этом уроке. Давайте посмотрим как будут выглядеть записи с первых уроков примени мы к ним литералы:

<code data-result="[object Object]">//До
NSArray *a3 = [NSArray arrayWithObject:@"An object"];
//После
NSArray *a3 = @[@"An object"];

//До
NSArray *girls = [NSArray arrayWithObjects:@"Amanda", @"Ira", @"Natali", nil];
NSArray *boys = [NSArray arrayWithObjects:@"Sergei", @"Vova", @"Ivan", nil];
NSDictionary *children = [NSDictionary dictionaryWithObjectsAndKeys:girls, @"girls", boys, @"boys", nil];
//После
NSDictionary *children = @{@"girls": @[@"Amanda", @"Ira", @"Natali"], @"boys": @[@"Sergei", @"Vova", @"Ivan"]};</code>

 

Литералы просто скрвают за собой длинные названия методов. Компактность видна невооруженным взглядом. Но на инициализации массивов и словарей возможности литералов не ограничиваются. Рассмотрим несколько примеров с классмо NSNumber.

 

<code data-result="[object Object]">NSNumber *letterNumber = @'W';          // аналогично [NSNumber numberWithChar:'W']
NSNumber *intNumber = @82;              // аналогично [NSNumber numberWithInt:82]
NSNumber *floatNumber = @3.141592654F;  // аналогично [NSNumber numberWithFloat:3.141592654F]
NSNumber *doubleNumber = @3.1415926535; // аналогично [NSNumber numberWithDouble:3.1415926535]
NSNumber *yesNumber = @YES;             // аналогично [NSNumber numberWithBool:YES]
NSNumber *noNumber = @NO;               // аналогично NSNumber numberWithBool:NO]</code>

 

До этого с помощью литералов мы лишь инициализировали массивы и словари, а как на счет установки/получения значений в них?

 

<code data-result="[object Object]">NSMutableArray *items = [NSMutableArray array];
items[0] = @"Item1";            //строка записана
NSLog(@"str is %@", items[0]);  //строка прочитана
items[1] = @"Item2";            //строка записана
items[10] = @"Item10";          //ошибка записи (индекс за пределами диапазона массива)
items[1] = nil;                 //ошибка (нельзя записывать в массив пустые значения)</code>

Похожая ситуация со словарями, разница лишь в том, что нет необходимости контролировать диапазон индексов:

<code data-result="[object Object]">NSMutableDictionary *items = [NSMutableDictionary dictionary];
items[@"key1"] = @"Item1";              //строка записана
NSLog(@"str is %@", items[@"key1"]);    //строка прочитана
items[@"key2"] = @"Item2";              //строка записана
items[@"key3"] = nil;                   //ошибка (нельзя записывать в словарь пустые значения)</code>

Это далеко не все возможности литералов. Пусть данный пример станет для вас трамплином в мир оптимизации и упрощения кода.

Comments are closed.