Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 7

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ элСмСнтов Π² коллСкциях ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ β€” это Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π² экзСмплярах ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Одна ΠΈΠ· самых распространСнных разновидностСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ β€” это массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ инстанцируСт 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Β»

)


Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° распространСнная коллСкция, которая часто встрСчаСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… для 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];

[setOfNumbers exchangeObjectAtIndex:1 withObjectAtIndex:2];


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

А Π²ΠΎΡ‚ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

Set of numbers = {(

3,

1,

4,

10,

0

)}


ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎ мноТСствах, упомяну Π΅Ρ‰Π΅ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ классС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. Класс NSCountedSet ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько Ρ€Π°Π· ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€Π°Π²Π΄Π°, Π² Π½Π΅ΠΌ эта Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΠ½Π°Ρ‡Π΅, Π½Π΅ΠΆΠ΅Π»ΠΈ Π² массивах. Π’ массивС ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько Ρ€Π°Π· ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. А Π² рассматриваСмом здСсь «подсчитываСмом мноТСствС» ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ появляСтся Π² мноТСствС ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ, Π½ΠΎ мноТСство Π²Π΅Π΄Π΅Ρ‚ подсчСт Ρ‚ΠΎΠ³ΠΎ, сколько Ρ€Π°Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² мноТСство, ΠΈ сниТаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого счСтчика Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΈΠ· этого мноТСства экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


NSCountedSet *setOfNumbers = [NSCountedSet setWithObjects:

@10, @20, @10, @10, @30, nil];


[setOfNumbers addObject:@20];

[setOfNumbers removeObject:@10];


NSLog(@"Count for object @10 = %lu",

(unsigned long)[setOfNumbers countForObject:@10]);


NSLog(@"Count for object @20 = %lu",

(unsigned long)[setOfNumbers countForObject:@20]);

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Count for object @10 = 2

Count for object @20 = 2

Класс NSCountedSet являСтся измСняСмым, хотя ΠΈΠ· Π΅Π³ΠΎ названия это ΠΈ Π½Π΅ слСдуСт.

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ подписывания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π²Π°ΡˆΠΈΡ… классах

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΏΡ€ΠΈ нСобходимости доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, содСрТащимся Π² коллСкциях β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, массивах ΠΈ словарях, β€” программисту Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π² словарС ΠΈΠ»ΠΈ массивС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр, создавая измСняСмый ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΌΡ‹ добавляСм Π² Π½Π΅Π³ΠΎ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния, получая эти значСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ:


NSString *const kFirstNameKey = @"firstName";

NSString *const kLastNameKey = @"lastName";


NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

[dictionary setValue:@"Tim" forKey: kFirstNameKey];

[dictionary setValue:@"Cook" forKey: kLastNameKey];


__unused NSString *firstName = [dictionary valueForKey: kFirstNameKey];

__unused NSString *lastName = [dictionary valueForKey: kLastNameKey];

Но с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ компилятора LLVM этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΠ΄Π°Π² Π΅ΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄: