Wil*_*sch 46 literals nsset nsorderedset
NSSet和NSOrderedSet操作可以用新的Objective-C集合文字执行什么(如果有的话)?
对于NSArray,NSDictionary和NSNumber,请参见此处.
FWIW,这个Big Nerd Ranch Post说索引语法应该适用于NSOrderedSet.但在我的测试中却没有.我一直无法找到有关创建有序集的任何内容.
mvl*_*mvl 47
NSSet没有Objective-C文字语法.虽然基于密钥的下标可能会使用索引下标来访问NSSet元素,但这并没有多大意义.通过包装或子类化,您可以添加自己的.
(更正):本来我还以为是NSOrderedSet也不支持,但事实证明,使用索引下标是支持的,但似乎没有要与文字语法初始化NSOrderedSet的一种方式.但是,您可以使用initWithArray:并传递文字数组:
NSMutableOrderedSet* oset = [[NSMutableOrderedSet alloc] initWithArray:
@[@"a", @"b", @"c", @"d", @42]];
oset[2] = @3;
NSLog(@"OrderedSet: %@", oset);
Run Code Online (Sandbox Code Playgroud)
输出:
OrderedSet: {(
a,
b,
3,
d,
42
)}
Run Code Online (Sandbox Code Playgroud)
根据Mike Ash的这篇优秀文章,您可以添加用于支持索引下标到您自己的对象的方法.
- (id)objectAtIndexedSubscript:(NSUInteger)index;
- (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;
Run Code Online (Sandbox Code Playgroud)
基于对象的键控的类似方法:
- (id)objectForKeyedSubscript: (id)key;
- (void)setObject: (id)obj forKeyedSubscript: (id)key;
Run Code Online (Sandbox Code Playgroud)
因此,您可以围绕NSSet实现包装器(或者使用更多工作,将其子类化)并提供基于密钥的检索.凉!
Dev*_*shi 38
在NSSet的情况下尝试这个怎么样:
#define $(...) [NSSet setWithObjects:__VA_ARGS__, nil]
Run Code Online (Sandbox Code Playgroud)
并使用它像这样:
NSSet *addresses = $(addr1,addr2,addr3,addr4);
Run Code Online (Sandbox Code Playgroud)
;-)