NSSet 和 NSOrderedSet 操作可以用新的 Objective-C 集合字面量执行什么(如果有)?
对于 NSArray、NSDictionary 和 NSNumber,请参见此处。
FWIW,这个 Big Nerd Ranch Post说索引语法应该适用于 NSOrderedSet。但在我的测试中它没有。而且我还没有找到有关创建有序集的任何信息。
NSSet 和 NSOrderedSet 操作可以用新的 Objective-C 集合字面量执行什么(如果有)?
对于 NSArray、NSDictionary 和 NSNumber,请参见此处。
FWIW,这个 Big Nerd Ranch Post说索引语法应该适用于 NSOrderedSet。但在我的测试中它没有。而且我还没有找到有关创建有序集的任何信息。
NSSet 没有 Objective-C 文字语法。使用索引下标来访问 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
)}
根据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);
;-)