gpt4 book ai didi

Objective-c:NSMutableDictionary 的多个类别,它们像独特的子类一样工作?

转载 作者:行者123 更新时间:2023-12-03 17:29:39 25 4
gpt4 key购买 nike

在我正在编写的 cocoa 应用程序中,我想创建 NSMutableDictionary 的几种不同类型的“子类”。我将该词放在引号中,因为我知道向 NSMutableDictionary 等类添加方法的推荐方法是使用类别。

但是,这给我带来了一个令人困惑的情况。

我希望 NSMutableDictionary 的每个类别都实现一个执行不同操作的“run”方法,具体取决于我引用的“子类”。例如,假设我有以下 3 个类别:

NSMutableDictionary+Category0
NSMutableDictionary+Category1
NSMutableDictionary+Category2

在每一个中,我都想要一个“运行”方法,例如,执行以下操作:

属于类别 0 ...

-(void)run {
NSLog(@"I'm running in NSMutableDictionary+Category0");
}

在类别 1 中...

-(void)run {
NSLog(@"I'm running in NSMutableDictionary+Category1");
}

在类别 2 中...

-(void)run {
NSLog(@"I'm running in NSMutableDictionary+Category2");
}

应用这些类别后,我想创建一个名为“myObjects”的 NSArray,其中包含类别 0、类别 1 和类别 2 对象的随机混合。然后,我想做以下事情:

for (NSMutableDictionary* dict in myObjects) {
[dict run];
}

...并调用每个特定于类别的“运行”方法。

除非我做错了什么,否则我无法让它正常工作,因为每个类别都尝试向 NSMutableDictionary 添加一个“run”方法,并且只会调用其中一个方法。

我想做的事情可能吗?如果是这样,有人可以向我指出适当的文档吗?

提前致谢。

<小时/>

感谢肖恩和迦勒。由于您概述的原因,我担心我无法做到这一点,但我想无论如何我都会问,以防我错过了一些可能对我有帮助的有关 Objective C 或 cocoa 的知识。

由于各种特定于应用程序的原因,我需要“父”类成为 NSMutableDictionary,因此我将按如下方式管理它......

我将创建一个类别,向 NSMutableDictionary 添加单个“run”方法。我将使用该字典中的一个特殊键来保存新的“MyRunnable”类的实例及其自己的“run”方法。我将为我想要的所有各种“运行”实现子类化这个 MyRunnable 类,然后我将实例化适当的子类并使用这个特殊键将其放入 NSMutableDictionary 中。然后,在 NSMutableDictionary 的“run”方法中,我将通过特殊键引用“MyRunnable”的实例并调用它自己的“run”方法。

这是另一种形式的遏制,它允许我的顶级类仍然是 NSMutableDictionary。

再次感谢。

最佳答案

你想做的事情是不可能的。在给定的上下文中,类别方法名称只能引用一种方法。也就是说,当您在每个类别中重新定义 run 时,它实际上会覆盖 run 的先前实现,因此您在 NSMutableDictionary 中永远不能拥有多个方法> 用这个名字。

作为解决方法,您可以尝试创建一系列包装类,每个包装类都包含一个可变字典并在其上实现 run 方法。这将使您不必子类化 NSMutableDictionary,但会为您提供所需的灵 active 。类似于:

@interface MyDictionaryWrapper1

@property (nonatomic, retain) NSMutableDictionary *myDict;

-(void)run;

@end

.
.
.

@implementation

-(void)run
{
//Do stuff with self.myDict here
}

然后,您可以编写 MyDictionaryWrapper2MyDictionaryWrapper3,它们各自以不同的方式实现 run

然后,在 for 循环中,您可以使用 id 来引用每个对象

for (id wrapper in myArrayOfDictionaryWrappers) {
[wrapper run];
}

关于Objective-c:NSMutableDictionary 的多个类别,它们像独特的子类一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com