iOS. Приемы программирования - [11]

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

>@"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»

>)


Еще одна распространенная коллекция, которая часто встречается в программах для iOS, — это словарь. Словари похожи на массивы, но каждому объекту в словаре присваивается ключ, и по этому ключу вы можете позже получить интересующий вас объект. Рассмотрим пример:


>NSDictionary *personInformation =

>@{

>@"firstName": @"Mark",

>@"lastName": @"Tremonti",

>@"age": @30,

>@"sex": @"Male"

>};


>NSString *firstName = personInformation[@"firstName"];

>NSString *lastName = personInformation[@"lastName"];

>NSNumber *age = personInformation[@"age"];

>NSString *sex = personInformation[@"sex"];


>NSLog(@"Full name = %@ %@", firstName, lastName);

>NSLog(@"Age = %@, Sex = %@", age, sex);

>А вот и вывод этой программы:

>Full name = Mark Tremonti

>Age = 30, Sex = Male


Можно также использовать изменяемые словари, которые довольно сильно похожи на изменяемые массивы. Содержимое изменяемого словаря можно изменить после того, как словарь инстанцирован. Пример:


>NSDictionary *personInformation =

>@{

>@"firstName": @"Mark",

>@"lastName": @"Tremonti",

>@"age": @30,

>@"sex": @"Male"

>};


>NSMutableDictionary *mutablePersonInformation =

>[[NSMutableDictionary alloc] initWithDictionary: personInformation];

>mutablePersonInformation[@"age"] = @32;


>NSLog(@"Information = %@", mutablePersonInformation);

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

>Information = {

>age = 32;

>firstName = Mark;

>lastName = Tremonti;

>sex = Male;

>}


Еще можно работать с множествами. Множества похожи на массивы, но любой объект, входящий в состав множества, должен встречаться в нем только один раз. Иными словами, в одном множестве не может быть двух экземпляров одного и того же объекта. Пример множества:


>NSSet *shoppingList = [[NSSet alloc] initWithObjects:

>@"Milk",

>@"Bananas",

>@"Bread",

>@"Milk", nil];


>NSLog(@"Shopping list = %@", shoppingList);

>Запустив эту программу, вы получите следующий вывод:

>Shopping list = {(

>Milk,

>Bananas,

>Bread

>)}


Обратите внимание: элемент Milk упомянут в программе дважды, а в множество добавлен всего один раз. Эта черта множеств — настоящее волшебство. Изменяемые множества можно использовать и вот так:


>NSSet *shoppingList = [[NSSet alloc] initWithObjects:

>@"Milk",

>@"Bananas",

>@"Bread",

>@"Milk", nil];


>NSMutableSet *mutableList = [NSMutableSet setWithSet: shoppingList];


>[mutableList addObject:@"Yogurt"];

>[mutableList removeObject:@"Bread"];

>NSLog(@"Original list = %@", shoppingList);

>NSLog(@"Mutable list = %@", mutableList);

>А вывод будет таким:

>Original list = {(

>Milk,

>Bananas,

>Bread

>)}

>Mutable list = {(

>Milk,

>Bananas,

>Yogurt

>)}


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

NSOrderedSet — неизменяемое множество, учитывающее, в каком порядке в него добавлялись объекты;

• NSMutableOrderedSet — изменяемый вариант вышеупомянутого изменяемого множества.

По умолчанию множества не учитывают, в каком порядке объекты в них добавлялись. Рассмотрим пример:


>NSSet *setOfNumbers = [NSSet setWithArray:@[@3, @4, @1, @5, @10]];

>NSLog(@"Set of numbers = %@", setOfNumbers);

>Запустив эту программу, получим на экране следующий вывод:

>Set of numbers = {(

>5,

>10,

>3,

>4,

>1

>)}


Но на самом деле мы наполняли множество элементами в другом порядке. Если вы хотите сохранить правильный порядок, просто воспользуйтесь классом NSOrderedSet:


>NSOrderedSet *setOfNumbers = [NSOrderedSet orderedSetWithArray

>:@[@3, @4, @1, @5, @10]];


>NSLog(@"Ordered set of numbers = %@", setOfNumbers);

>Разумеется, вы можете воспользоваться и изменяемой версией упорядоченного множества:

>NSMutableOrderedSet *setOfNumbers =

>[NSMutableOrderedSet orderedSetWithArray:@[@3, @4, @1, @5, @10]];


>[setOfNumbers removeObject:@5];

>[setOfNumbers addObject:@0];


Рекомендуем почитать
Графика DirectX в Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Автостопом по Python

Перед вами — увлекательная книга, которую по достоинству оценит любой неравнодушный программист и даже бывалый питонщик. Она составлена на основе одноименного онлайнового руководства http://docs.python-guide.org/en/latest/ и содержит наработки многочисленных профессионалов и энтузиастов, знающих, что такое Python, и чего вы от него хотите. Проверенные методы и новейшие приемы, собранные в этой книге, помогут вам стать профессиональным Python-программистом и во всеоружии встретить наступающую эпоху Python 3.


Философия DevOps. Искусство управления IT

IT-принцип «agile» стал мантрой цифровой эпохи. С ростом проектов, переходом от монолитных приложений к системе микросервисов, увеличением и накоплением продуктов возникают вопросы, которые требуют совершенно иного подхода. Теперь наибольший интерес вызывает находящаяся на стыке разработки и операционного управления методология DevOps.DevOps – это не просто набор техник, это философия. Разработчики, зацикленные на пользователях, должны уделять внимание поддержке и ее запросам. Сисадмины должны сообщать о проблемах продукта и вносить свой вклад в улучшение процесса работы.


Простой Python. Современный стиль программирования

Эта книга идеально подходит как для начинающих программистов, так и для тех, кто только собирается осваивать Python, но уже имеет опыт программирования на других языках. В ней подробно рассматриваются самые современные пакеты и библиотеки Python. Стилистически издание напоминает руководство с вкраплениями кода, подробно объясняя различные концепции Python 3. Под обложкой вы найдете обширный материал от самых основ языка до сравнительно сложных и узких тем. Прочитав эту книгу, вы не только убедитесь, что Python — это вкусно, но и освоите искусство тестирования, отладки, многократного использования кода, а также научитесь применять Python в различных предметных областях.