Objective-C为NSSet和NSOrderedSet文字?

如果有的话,NSSet和NSOrderedSet操作可以用新的Objective-C集合文字执行什么操作?

对于NSArray,NSDictionary和NSNumber,请看这里 。

FWIW, 这个Big Nerd Ranch Post说索引语法应该适用于NSOrderedSet。 但是在我的testing中并没有。 而我一直无法find有关创build有序集合的任何信息。

NSSet没有Objective-C文字语法。 尽pipe基于密钥的下标可能会使用索引下标来访问NSSet元素并没有什么意义。 无论是通过包装还是inheritance,您都可以添加自己的。

(更正):原本我以为NSOrderedSet也不被支持,但事实certificate,使用索引下标受支持的,但是似乎没有办法用文字语法初始化NSOrderedSet。 但是,您可以使用initWithArray:并传递一个文字数组:

NSMutableOrderedSet* oset = [[NSMutableOrderedSet alloc] initWithArray: @[@"a", @"b", @"c", @"d", @42]]; oset[2] = @3; NSLog(@"OrderedSet: %@", oset); 

输出:

 OrderedSet: {( a, b, 3, d, 42 )} 

根据Mike Ash的这篇出色的文章 ,您可以将用于支持索引下标的方法添加到您自己的对象中。

 - (id)objectAtIndexedSubscript:(NSUInteger)index; - (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index; 

和类似的基于对象的键控方法:

 - (id)objectForKeyedSubscript: (id)key; - (void)setObject: (id)obj forKeyedSubscript: (id)key; 

因此你可以在NSSet周围实现一个包装器(或者更多的工作,子类化),并提供基于密钥的检索。 凉!

在NSSet的情况下,如何尝试这个:

 #define $(...) [NSSet setWithObjects:__VA_ARGS__, nil] 

像这样使用它:

 NSSet *addresses = $(addr1,addr2,addr3,addr4); 

😉