Пример:
Результат исполнения:
NSDictionary *theDomains = [NSDictionary dictionaryWithObjectsAndKeys:
@"Россия", @"ru"
, @"Соединенные Штаты Америки", @"us"
, @"Китай", @"cn"
, @"Индия", @"in"
, @"Бразилия", @"br"
, @"Иран", @"ir"
, @"Великобритания", @"uk", nil];
NSEnumerator *theKeyEnumerator = [theDomains keyEnumerator];
NSEnumerator *theObjectEnumerator = [theDomains objectEnumerator];
NSString *theDomain;
while (theDomain = [theKeyEnumerator nextObject])
{
NSString *theCountry = [theObjectEnumerator nextObject];
NSLog(@"%@ - %@", theCountry, theDomain);
}
Результат исполнения:
2015-03-19 03:37:32.822 CommandLineTool[5916:303] Китай - cn 2015-03-19 03:37:32.824 CommandLineTool[5916:303] Индия - in 2015-03-19 03:37:32.825 CommandLineTool[5916:303] Соединенные Штаты Америки - us 2015-03-19 03:37:32.825 CommandLineTool[5916:303] Великобритания - uk 2015-03-19 03:37:32.826 CommandLineTool[5916:303] Россия - ru 2015-03-19 03:37:32.826 CommandLineTool[5916:303] Иран - ir 2015-03-19 03:37:32.827 CommandLineTool[5916:303] Бразилия - br
Как видно порядок указанный при инициализации и порядок при обходе различаются. Но это естественно, ведь используется структура данных "словарь" и порядок тут не важен.
В примере выше хватило бы одного keyEnumerator, а получить соответствующий ключу объект можно было бы например так:
NSEnumerator *theKeyEnumerator = [theDomains keyEnumerator];
NSString *theDomain;
while (theDomain = [theKeyEnumerator nextObject])
{
NSString *theCountry = theDomains[theDomain];
NSLog(@"%@ - %@", theCountry, theDomain);
}
Или так:
NSString *theCountry = [theDomains objectForKey:theDomain];
Можно ещё пару слов сказать об методе инициализации dictionaryWithObjectsAndKeys:, данный метод работает пока не встретит nil. Поэтому если переменная-ключ окажется nil, то вы получите ошибку, а если переменная-значение окажется nil, то создание словаря закончится в этом месте. В примере выше инициализация проводится литералами, но в реальном коде вы можете использовать переменные и незнание этого нюанса может привести к недопониманию.