【问题标题】:Category NSMutableDictionary/NSDictionary should return NSMutableDictionary/NSDictionary Depending of the caller class类别 NSMutableDictionary/NSDictionary 应该返回 NSMutableDictionary/NSDictionary 取决于调用者类
【发布时间】: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,以避免任何可能的警告等。

建议我应该如何通过错误管理在一个类别中创建它?

【问题讨论】:

    标签: objective-c nsdictionary categories nsmutabledictionary nserror


    【解决方案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)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多