首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMapTable在iOS 6中的子脚本语法

NSMapTable在iOS 6中的子脚本语法
EN

Stack Overflow用户
提问于 2012-10-31 00:51:34
回答 2查看 1.1K关注 0票数 5

我在一个NSMapTable 6项目的许多地方使用iOS,并且希望能够使用新的字典订阅样式来访问对象。(NSMapTable的行为主要类似于NSMutableDictionary,但可以为其存储的键和值配置各种内存管理选项。(更多关于this StackOverflow question的背景。)

当试图对NSMapTable实例使用订阅语法时,编译器会报告此情况:

读取“NSMapTable*”类型对象上找不到的字典元素的预期方法。

如何使用类别扩展NSMapTable以允许新的NSDictionary-style订阅?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-31 01:11:23

答案实际上很简单;有关如何实现订阅的更多信息,请参见this question。添加这样一个类别。

标题:

代码语言:javascript
复制
@interface NSMapTable (Subscripting)

- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
- (id)objectForKeyedSubscript:(id)key;

@end

执行情况:

代码语言:javascript
复制
@implementation NSMapTable (Subscripting)

- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key {
    [self setObject:obj forKey:key];
}

- (id)objectForKeyedSubscript:(id)key {
    return [self objectForKey:key];
}

@end

这让我一度怀疑,在某些情况下,下标访问是否真的比其他方法慢一点点,但“过早优化”一词使这种想法变得无关紧要。

票数 4
EN

Stack Overflow用户

发布于 2017-02-17 13:33:32

使用NSDictionarynil键设置对象的行为改进的@mjh回答,并添加了Obj泛型:

代码语言:javascript
复制
@interface NSMapTable<KeyType, ObjectType> (Subscripting)

- (void)setObject:(ObjectType)obj forKeyedSubscript:(KeyType)key;
- (ObjectType)objectForKeyedSubscript:(KeyType)key;

@end

@implementation NSMapTable (Subscripting)

- (void)setObject:(id)obj forKeyedSubscript:(id)key {
    if (object) {
        [self setObject:obj forKey:key];
    } else {
        [self removeObjectForKey:key];
    }
}

- (id)objectForKeyedSubscript:(id)key {
    return [self objectForKey:key];
}

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

https://stackoverflow.com/questions/13149740

复制
相关文章

相似问题

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