Objective-C Language
NSDictionary
Поиск…
Синтаксис
@ {ключ: значение, ...}
[Словарь NSDictionaryWithObjectsAndKeys: значение, ключ, ..., ноль];
dict [ key ] = значение ;
id value = dict [ key ];
замечания
Класс NSDictionary объявляет программный интерфейс объектам, которые управляют неизменяемыми ассоциациями ключей и значений. Используйте этот класс или его подкласс NSMutableDictionary, когда вам нужен удобный и эффективный способ получения данных, связанных с произвольным ключом. NSDictionary создает статические словари, а NSMutableDictionary создает динамические словари. (Для удобства термин «словарь» относится к любому экземпляру одного из этих классов без указания его точного членства в классе).
Пара ключевых слов в словаре называется записью. Каждая запись состоит из одного объекта, который представляет ключ и второй объект, который является значением этого ключа. В словаре есть уникальные ключи. То есть, никакие два ключа в одном словаре не равны (как определено isEqual :). В общем случае ключ может быть любым объектом (при условии, что он соответствует протоколу NSCopying - см. Ниже), но обратите внимание, что при использовании кодирования с ключом ключ должен быть строкой (см. Основы кодирования по ключевым параметрам). Ни ключ, ни значение не могут быть равны нулю; если вам нужно представить нулевое значение в словаре, вы должны использовать NSNull.
NSDictionary является «бесплатным мостом» с его коллегой Core Foundation, CFDictionaryRef. См. «Бесконечное мостовое соединение» для получения дополнительной информации о бесплатном мостовом соединении.
Создание с использованием литералов
NSDictionary *inventory = @{
@"Mercedes-Benz SLK250" : @(13),
@"BMW M3 Coupe" : @(self.BMWM3CoupeInventory.count),
@"Last Updated" : @"Jul 21, 2016",
@"Next Update" : self.nextInventoryUpdateString
};
Создание с использованием словаряWithObjectsAndKeys:
NSDictionary *inventory = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:13], @"Mercedes-Benz SLK250",
[NSNumber numberWithInt:22], @"Mercedes-Benz E350",
[NSNumber numberWithInt:19], @"BMW M3 Coupe",
[NSNumber numberWithInt:16], @"BMW X6",
nil];
nil
должен быть передан как последний параметр в качестве часового, означающего конец.
Важно помнить, что при копировании словарей таким образом значения сначала идут, а клавиши - вторые. В приведенном выше примере строки представляют собой ключи, а цифры - значения. Имя метода также отражает это: dictionaryWithObjectsAndKeys
. Хотя это неверно, более современный способ создания словарей (с литералами) предпочтительнее.
Создание с использованием plists
NSString *pathToPlist = [[NSBundle mainBundle] pathForResource:@"plistName"
ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:pathToPlist];
Установка значения в NSDictionary
Существует несколько способов установить объект ключа в NSDictionary, соответствующий способам получения значения. Например, добавить lamborghini в список автомобилей
стандарт
[cars setObject:lamborghini forKey:@"Lamborghini"];
Как и любой другой объект, вызовите метод NSDictionary, который задает объект ключа, objectForKey:
Будьте осторожны, чтобы не путать это с setValue:forKey:
это совсем другое дело, Key Value Coding
стенография
cars[@"Lamborghini"] = lamborghini;
Это синтаксис, который вы используете для словарей на большинстве других языков, таких как C #, Java и Javascript. Это намного удобнее стандартного синтаксиса и, возможно, более читабельно (особенно, если вы кодируете на этих других языках), но, конечно, это не стандарт . Он также доступен только в новых версиях Objective C
Получение значения из NSDictionary
Существует несколько способов получить объект из NSDictionary с ключом. Например, чтобы получить lamborghini из списка автомобилей
стандарт
Car * lamborghini = [cars objectForKey:@"Lamborghini"];
Как и любой другой объект, вызовите метод NSDictionary, который дает вам объект для ключа, objectForKey:
Будьте осторожны, чтобы не путать это с valueForKey:
это совсем другое дело, Key Value Coding
стенография
Car * lamborghini = cars[@"Lamborghini"];
Это синтаксис, который вы используете для словарей на большинстве других языков, таких как C #, Java и Javascript. Это намного удобнее стандартного синтаксиса и, возможно, более читабельно (особенно, если вы кодируете на этих других языках), но, конечно, это не стандарт . Он также доступен только в новых версиях Objective C
Убедитесь, что NSDictionary уже имеет ключ или нет.
Цель c:
//this is the dictionary you start with.
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"name1", @"Sam",@"name2", @"Sanju",nil];
//check if the dictionary contains the key you are going to modify. In this example, @"Sam"
if (dict[@"name1"] != nil) {
//there is an entry for Key name1
}
else {
//There is no entry for name1
}