首页 > 解决方案 > 实现不区分大小写的 NSMutableDictionary

问题描述

我尝试继承NSMutableDictionary<NSString *,NSString *>以使用不区分大小写的键实现字典。这是我的实现:

@interface NSMutableDictionaryLowerCase : NSMutableDictionary<NSString*, NSString *>
@end

@implementation NSMutableDictionaryLowerCase
    
-(NSString *)objectForKey:(NSString *)aKey {
    return [[super objectForKey:aKey] lowercaseString];
}

@end
NSMutableDictionaryLowerCase * x = [NSMutableDictionaryLowerCase new];
    
[x setValue:@"XxX" forKey:@"YyY"];

NSLog(@" %@ %@ ", x[@"xxx"], x[@"XXX"]) 

但是,当将它与以下代码一起使用时,它会通过setValue以下消息捕获异常:

[NSMutableDictionary setObject:forKey:]: method only defined for abstract class. Define -[NSMutableDictionaryLowerCase setObject:forKey:]!'

我不明白,NSMutableDictionary不应该是抽象类,我认为这个方法实现已经存在......我做错了什么?

标签: objective-coopinheritance

解决方案


来自以下文档NSMutableDictionary

子类化注释

通常应该很少需要子类化NSMutableDictionary. 如果您确实需要自定义行为,通常最好考虑组合而不是子类化。

覆盖的方法

在子类中,您必须覆盖它的两个原始方法:

  • setObject(_:forKey:)
  • removeObject(forKey:)

您还必须覆盖NSDictionary类的原始方法。


推荐阅读