objective-c - 实现不区分大小写的 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
不应该是抽象类,我认为这个方法实现已经存在......我做错了什么?
解决方案
来自以下文档NSMutableDictionary
:
子类化注释
通常应该很少需要子类化NSMutableDictionary
. 如果您确实需要自定义行为,通常最好考虑组合而不是子类化。
覆盖的方法
在子类中,您必须覆盖它的两个原始方法:
- setObject(_:forKey:)
- removeObject(forKey:)
您还必须覆盖NSDictionary
类的原始方法。
推荐阅读
- python - Pdfkit 没有在 Flask 中将我的 Pygal svg 图转换为 pdf
- angular - 找不到模块或其对应的类型声明
- python - 使用滑块在 tkinter 画布上显示部分条形图:如何删除初始的整个条形图?
- hyperlink - 如何在 Oracle Apex 表单上显示可点击的链接
- sql-server - 从 Azure Analytics Log 错误消息中查找 SQL 查询
- flutter - 如何从 Flutter 中的同一函数动态创建多个下拉列表
- audio - 每个 mdat 中应包含多少个视频和音频样本?
- api - 偏移量和限制应该在 API 响应正文中吗?
- variables - 如何使用 jinja2 从列表中删除项目
- python - Sagemaker AWS牧马人>2.3.0