类别 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 取决于调用者类的主要内容,如果未能解决你的问题,请参考以下文章

从类别树中清除空类别

遍历 twig 中的类别、子类别和产品

类别和子类别架构设计

如何使用 Python 在类别***页面的类别中抓取子类别和页面

Prestashop 子类别中的子类别菜单

类别和子类别