iOS. Приемы программирования - страница 22

Шрифт
Интервал


реализовывать все аспекты, требуемые протоколом Car, вот так:


>#import 

>#import "Car.h"


>@interface Jaguar: NSObject 


>@property (nonatomic, copy) NSArray *wheels;

>@property (nonatomic, strong) UIColor *bodyColor;

>@property (nonatomic, copy) NSArray *doors;


>@end


Отлично. Теперь мы понимаем основы работы с протоколами, то, как они работают и как их определить. Далее в этой книге мы подробнее поговорим о протоколах, а на данный момент вы получили довольно полное представление о них.

Хранение элементов в коллекциях и получение элементов из коллекций

Коллекции – это такие объекты, в экземплярах которых могут храниться другие объекты. Одна из самых распространенных разновидностей коллекций – это массив, который инстанцирует NSArray или NSMutableArray. В массиве можно хранить любой объект, причем массив может содержать несколько экземпляров одного и того же объекта. В следующем примере мы создаем массив из трех строк:


>NSArray *stringsArray = @[

>@"String 1",

>@"String 2",

>@"String 3"

>];


>__unused NSString *firstString = stringsArray[0];

>__unused NSString *secondString = stringsArray[1];

>__unused NSString *thirdString = stringsArray[2];

Макрос __unused приказывает компилятору «не жаловаться», когда переменная – в нашем случае переменная firstString – объявлена, но ни разу не использовалась. По умолчанию в такой ситуации компилятор выдает в консоль предупреждение, сообщающее, что переменная не используется. В нашем кратком примере мы объявили переменные, но не задействовали их. Поэтому, если добавить вышеупомянутый макрос в начале объявления переменной, это вполне устроит и нас, и компилятор.

Изменяемый массив – это такой массив, в который можно вносить изменения уже после того, как он был создан. Как мы видели ранее, неизменяемый массив не может быть дополнен новой информацией уже после создания. Вот пример неизменяемого массива:


>NSString *string1 = @"String 1";

>NSString *string2 = @"String 2";

>NSString *string3 = @"String 3";


>NSArray *immutableArray = @[string1, string2, string3];


>NSMutableArray *mutableArray = [[NSMutableArray alloc]

>initWithArray: immutableArray];


>[mutableArray exchangeObjectAtIndex:0 withObjectAtIndex:1];

>[mutableArray removeObjectAtIndex:1];

>[mutableArray setObject: string1 atIndexedSubscript:0];

>NSLog(@"Immutable array = %@", immutableArray);