Доступ к ключам в NSDictionary с использованием нотации [ключ]?

Я только что понял, что могу получить доступ NSDictionary используя оба objectForKey: и диктовать [ключ]?

NSDictionary *coordsDict = @{@"xpos": @5.0, @"ypos": @7.2, @"zpos": @15.7};
NSLog(@"XPOS: %@", coordsDict[@"xpos"]);
NSLog(@"XPOS: %@", [coordsDict objectForKey:@"xpos"]);

Может кто-нибудь сказать мне, скрывалось ли это от меня все это время или это было довольно недавним изменением языка?

РЕДАКТИРОВАТЬ: Вопрос в общем относится не к новым строковым литералам, а более конкретно к доступу к NSDictionary с тем же синтаксисом строкового литерала, который вы использовали бы для NSArray. Я явно упустил это из виду и просто хотел проверить, когда этот конкретный синтаксис был добавлен.

2 ответа

Решение

Это новое дополнение к Xcode 4.4+ и использует компилятор LLVM+Clang от Apple. Это новая функция:) Массивы также могут быть доступны с такими же обозначениями: myObjectArray[4],

Если вы заинтересованы в добавлении этой новой функции в ваши собственные классы (называемые подпиской), есть несколько методов, которые вы можете реализовать:

@interface NSArray(Subscripting)
- (id)objectAtIndexedSubscript:(NSUInteger)index;
@end

@interface NSMutableArray(Subscripting)
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index;
@end

@interface NSDictionary(Subscripting)
- (id)objectForKeyedSubscript:(id)key;
@end

@interface NSMutableDictionary(Subscripting)
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
@end

Если вы реализуете какой-либо из этих методов в своих собственных классах, вы можете использовать их в своих индексах. Это также, как вы можете добавить эту функцию в OS X 10.7 тоже!

См. "Современный Objective-C", представленный в iOS 6.

Смотрите видео WWDC 2012: переход на современную Objective-C.

Так что нет, эта функция на самом деле не нова, и вы ее не заметили...;-)

Другие вопросы по тегам