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);
😉