类别 NSMutableDictionary/NSDictionary 应该返回 NSMutableDictionary/NSDictionary 取决于调用者类
Posted
技术标签:
【中文标题】类别 NSMutableDictionary/NSDictionary 应该返回 NSMutableDictionary/NSDictionary 取决于调用者类【英文标题】:Category NSMutableDictionary/NSDictionary should return NSMutableDictionary/NSDictionary Depending of the caller class 【发布时间】:2011-12-29 23:55:13 【问题描述】:我为此忙了几个小时,但看不到头或尾。
我应该如何创建一个NS(Mutable)Dictionary
类别,我可以让它返回与发送方法类相同的类。
样本
+(NSDictionary *)dictionaryWithAdditions:path error:(NSError**)error;
NSDictionary * dict = [NSDictionary dictionaryWithAdditions:path error:&error];
应该返回一个NSDictionary
。
与
+(NSMutableDictionary *)dictionaryWithAdditions:path error:(NSError**)error;
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithAdditions:path error:&error];
应该返回一个 NSMutableDictionary。
我不想返回id
,以避免任何可能的警告等。
建议我应该如何通过错误管理在一个类别中创建它?
【问题讨论】:
【参考方案1】:您要么需要创建两种不同的方法(例如dictionaryWithAdditions:
和mutableDictionaryWithAdditions:
),要么返回id
(我建议使用后者)。类型系统不允许我们说“如果接收者静态类型为 NSDictionary,则为 NSDictionary,如果接收者静态类型为 NSMutableDictionary,则为 NSMutableDictionary,否则为错误”。
【讨论】:
【参考方案2】:返回id
时会收到什么警告?这就是标准的init
方法所做的。
您的方法可能类似于:
+ (id)dictionaryWithAdditions:path error:(NSError**)error;
id dictionary = [[[self alloc] init] autorelease];
// ... do something
return dictionary;
【讨论】:
谢谢,我正在尝试使用 [class self] 之类的东西来获取当前课程。我也会坚持(id)。以上是关于类别 NSMutableDictionary/NSDictionary 应该返回 NSMutableDictionary/NSDictionary 取决于调用者类的主要内容,如果未能解决你的问题,请参考以下文章