>__unused NSString *firstName = person.firstName;

>__unused NSString *lastName = person.lastName;


Вы также можете поддерживать и подписывание по индексу – точно как при работе с массивами. Как было указано ранее, это полезно делать, чтобы обеспечивать программисту доступ к объектам, выстраиваемым в классе в некоем естественном порядке. Но, кроме массивов, существует не так уж много структур данных, где целесообразно упорядочивать и нумеровать элементы, чего не скажешь о подписывании по ключу, которое применяется в самых разных структурах данных. Поэтому пример, которым иллюстрируется подписывание по индексу, немного надуман. В предыдущем примере у нас существовал класс Person с именем и фамилией. Теперь мы хотим предоставить программистам возможность считывать имя, указывая индекс 0, а фамилию – указывая индекс 1. Все, что требуется сделать для этого, – объявить методы objectAtIndexedSubscript: и setObject: atIndexedSubscript: в заголовочном файле класса, а затем написать реализацию. Вот как мы объявляем два этих метода в заголовочном файле класса Person:

– (id) objectAtIndexedSubscript:(NSUInteger)paramIndex;

– (void) setObject:(id)paramObject atIndexedSubscript:(NSUInteger)paramIndex;

Реализация также довольно проста. Мы берем индекс и оперируем им так, как это требуется в нашем классе. Ранее мы решили, что у имени должен быть индекс 0, а у фамилии – индекс 1. Итак, получаем индекс 0 для задания значения, присваиваем значение имени первому входящему объекту и т. д.:


>– (id) objectAtIndexedSubscript:(NSUInteger)paramIndex{


>switch (paramIndex){

>case 0:{

>return self.firstName;

>break;

>}

>case 1:{

>return self.lastName;

>break;

>}

>default:{

>[NSException raise:@"Invalid index" format: nil];

>}

>}


>return nil;

>}


>– (void) setObject:(id)paramObject atIndexedSubscript:(NSUInteger)paramIndex{

>switch (paramIndex){

>case 0:{

>self.firstName = paramObject;

>break;

>}

>case 1:{

>self.lastName = paramObject;

>break;

>}

>default:{

>[NSException raise:@"Invalid index" format: nil];

>}

>}

>}

>Теперь можно протестировать весь написанный ранее код вот так:

>Person *person = [Person new];

>person[kFirstNameKey] = @"Tim";

>person[kLastNameKey] = @"Cook";

>NSString *firstNameByKey = person[kFirstNameKey];

>NSString *lastNameByKey = person[kLastNameKey];


>NSString *firstNameByIndex = person[0];

>NSString *lastNameByIndex = person[1];


>if ([firstNameByKey isEqualToString: firstNameByIndex] &&

>[lastNameByKey isEqualToString: lastNameByIndex]){

>NSLog(@"Success");

>} else {

>NSLog(@"Something is not right");

>}


Если вы правильно выполнили все шаги, описанные в этом разделе, то на консоли должно появиться значение Success.

1.1. Отображение предупреждений с помощью UIAlertView

Постановка задачи

Вы хотите, чтобы у ваших пользователей отобразилось сообщение, которое будет оформлено как предупреждение (Alert). Такие сообщения можно применять, чтобы попросить пользователя подтвердить выбранное действие, запросить у него имя и пароль или просто предложить ввести какой-нибудь простой текст, который вы сможете использовать в своем приложении.

Решение

Воспользуйтесь UIAlertView.

Обсуждение

Если вы сами пользуетесь iOS, то вам определенно попадались виды-предупреждения. Пример такого вида показан на рис. 1.1.


Рис. 1.1. Вид-предупреждение, сообщающий пользователю, что для работы требуется активное соединение с Интернетом


Наилучший способ инициализации вида-предупреждения заключается, разумеется, в использовании его базового конструктора-инициализатора:


>– (void) viewDidAppear:(BOOL)paramAnimated{


>[super viewDidAppear: paramAnimated];