iOS. Приемы программирования. Вандад Нахавандипур. Читать онлайн. Newlib. NEWLIB.NET

Автор: Вандад Нахавандипур
Издательство: ""Издательство ""Питер""
Серия: Бестселлеры O’Reilly (Питер)
Жанр произведения: Программирование
Год издания: 2014
isbn: 978-5-496-01016-0
Скачать книгу
вы попробуете собрать ваш проект на данном этапе, то компилятор выдаст вам несколько предупреждений, например такое:

      Auto property synthesis will not synthesize property declared in a protocol

      Это означает, что ваш класс Jaguar пытается соответствовать протоколу Car, но на самом деле не реализует всех требуемых свойств и/или методов, описанных в этом протоколе. Теперь вы уже знаете, что в протоколе могут содержаться необходимые и факультативные (опциональные) элементы, которые вы помечаете ключевыми словами @optional или @required. По умолчанию действует квалификатор @required, и поскольку мы явно не указываем квалификатор для этого протокола, компилятор неявно выбирает @required за нас. Следовательно, класс Jaguar теперь обязан реализовывать все аспекты, требуемые протоколом Car, вот так:

      #import <Foundation/Foundation.h>

      #import "Car.h"

      @interface Jaguar: NSObject <Car>

      @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);

      NSLog(@"Mutable Array = %@", mutableArray);

      Вывод этой программы таков:

      Immutable array = (

      "String 1",

      "String 2",

      "String 3"

      )

      Mutable Array = (

      "String 1",

      "String 3"

      )

      Еще