Доступ к ключам в 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.
Так что нет, эта функция на самом деле не нова, и вы ее не заметили...;-)