首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSet和NSOrderedSet的目标C文字?

NSSet和NSOrderedSet的目标C文字?
EN

Stack Overflow用户
提问于 2012-08-14 03:15:16
回答 2查看 23.2K关注 0票数 48

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

对于NSArray、NSDictionary和NSNumber,请参阅here

this Big Nerd Ranch Post说,索引语法应该适用于NSOrderedSet。但在我的测试中,它不会。我还没能找到任何关于创建有序集的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-06 13:30:00

NSSet没有Objective-C文字语法。使用索引下标来访问NSSet元素实际上没有意义,尽管基于键的下标可能会。通过包装或子类化,你可以添加你自己的。

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

代码语言:javascript
复制
NSMutableOrderedSet* oset = [[NSMutableOrderedSet alloc] initWithArray: 
    @[@"a", @"b", @"c", @"d", @42]];

oset[2] = @3;
NSLog(@"OrderedSet: %@", oset);

输出:

代码语言:javascript
复制
OrderedSet: {(
    a,
    b,
    3,
    d,
    42
)}

根据Mike Ash的this excellent post,您可以将用于支持索引订阅的方法添加到您自己的对象。

代码语言:javascript
复制
- (id)objectAtIndexedSubscript:(NSUInteger)index;
- (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;

以及用于基于对象的键控的类似方法:

代码语言:javascript
复制
- (id)objectForKeyedSubscript: (id)key;
- (void)setObject: (id)obj forKeyedSubscript: (id)key;

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

票数 48
EN

Stack Overflow用户

发布于 2013-03-02 18:00:40

在NSSet的情况下,试试这个怎么样:

代码语言:javascript
复制
#define $(...)  [NSSet setWithObjects:__VA_ARGS__, nil]

并像这样使用它:

代码语言:javascript
复制
NSSet *addresses = $(addr1,addr2,addr3,addr4);

;-)

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11940797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档