답변:
for (NSString* key in xyz) {
id value = xyz[key];
// do stuff
}
NSFastEnumeration 프로토콜 (10.5 이상 및 iOS에서 사용 가능)을 준수하는 모든 클래스에서 작동하지만 NSDictionary
값 대신 키를 열거 할 수있는 몇 안되는 컬렉션 중 하나입니다. Collections Programming Topic 에서 빠른 열거 에 대해 읽으십시오 .
오, 당신이해야하지만 추가해야 결코 그것을 통해 열거하는 동안 컬렉션을 수정할 수 없습니다.
for (NSString* key in [xyz allKeys])
개념적으로 같은 것입니다.
블록을 사용하여 키와 값을 열거하는 10.6+ 옵션을 생략하지 않으려면 ...
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
}];
작업을 동시에 수행하려는 경우 :
[dict enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
}];
*stop
? 어떻게 사용합니까? 어떤 참조?
열거하는 동안 사전 을 변경 해야하는 경우 :
for (NSString* key in xyz.allKeys) {
[xyz setValue:[NSNumber numberWithBool:YES] forKey:key];
}
allKeys
키 사본을 리턴하기 때문입니다 . 따라서 사전을 변경하는 것이 안전합니다.
Cocoa를위한 Collections Programming Guide 의 Enumeration : Collections Collections 요소 부분 을 읽는 것이 좋습니다 . 필요한 샘플 코드가 있습니다.
빠른 열거는 10.5와 iPhone OS에 추가되었으며 구문 설탕뿐만 아니라 상당히 빠릅니다. 이전 런타임을 대상으로해야하는 경우 (예 : 10.4 이상) 이전 열거 방법을 사용해야합니다.
NSDictionary *myDict = ... some keys and values ...
NSEnumerator *keyEnum = [myDict keyEnumerator];
id key;
while ((key = [keyEnum nextObject]))
{
id value = [myDict objectForKey:key];
... do work with "value" ...
}
열거 자 개체를 해제하지 않고 다시 설정할 수 없습니다. 다시 시작하려면 사전에서 새 열거 자 객체를 요청해야합니다.
-[NSDictionary allKeys]
모든 키에 액세스하고 반복 하는 데 사용할 수 있습니다 .