Ответ 1
Нет синтаксиса Objective-C для NSSet. На самом деле не имеет смысла использовать индексирование индексирования для доступа к элементам NSSet, хотя возможно и подписи на основе ключей. Либо путем обертывания, либо подклассификации вы можете добавить свой собственный.
(Коррекция): Первоначально я думал, что NSOrderedSet тоже не поддерживается, но оказывается, что поддержка индексирования индексирования поддерживается, но, похоже, не существует способа инициализации NSOrderedSet с литеральным синтаксисом. Однако вы можете использовать initWithArray: и передать литерал массив:
NSMutableOrderedSet* oset = [[NSMutableOrderedSet alloc] initWithArray:
@[@"a", @"b", @"c", @"d", @42]];
oset[2] = @3;
NSLog(@"OrderedSet: %@", oset);
Выходы:
OrderedSet: {(
a,
b,
3,
d,
42
)}
Согласно этот отличный пост Майка Эша, вы можете добавить методы, которые используются для поддержки индексированных подписчиков на ваши собственные объекты.
- (id)objectAtIndexedSubscript:(NSUInteger)index;
- (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;
И аналогичные методы для объектной привязки:
- (id)objectForKeyedSubscript: (id)key;
- (void)setObject: (id)obj forKeyedSubscript: (id)key;
Таким образом, вы можете реализовать оболочку (или немного больше работы, подкласс) вокруг NSSet и обеспечить поиск по ключевым словам. Круто!