使用新的Objective-C集合文字可以执行哪些NSSet和NSOrderedSet操作?

对于NSArray,NSDictionary和NSNumber,请参见here

FWIW this 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的this excellent post,您可以将用于支持索引下标的方法添加到您自己的对象中。
- (id)objectAtIndexedSubscript:(NSUInteger)index;
- (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;

以及类似的基于对象的键控方法:
- (id)objectForKeyedSubscript: (id)key;
- (void)setObject: (id)obj forKeyedSubscript: (id)key;

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

10-01 00:11