转发所选 class 以用于另一个 class

Forward selected class to use in another class

我有点脑残。我希望有人能帮助我。

我有一个可以与不同设备通信的应用程序。根据它与哪个设备通信,我需要使用不同的方法。

我有几个不同的 classes 做一些解析,我已经将 class 的子 classes 称为 Parse(不要与解析云服务),这些只有 Class 个方法。例如Parse_Device1Parse_Device2

我有第三个 class(我们称它为 Selection),它 return 有各种不同的东西,具体取决于应用程序与之通信的设备。

我怎样才能拥有这个 class return 所需的 Parse subclass 并使用 returned?

我知道我可以轻松 allocinit 需要的 class,存储它或 return 它。 但是,由于解析 classes 上的所有方法都只是 Class 方法,因此根本不需要 init

我试过这样,但是我似乎无法直接使用 returned class:

+ (Parser *)parser_AccessList
{
    switch ([self brand]) {
        case Brand1:
            return [Parse_AccessList_1 alloc];
            break;

        case Brand2:
            return [Parse_AccessList_2 alloc];
            break;

        case Brand3:
            return [Parse_AccessList_3 alloc];
            break;

        default:
            return nil;
            break;
    }
}

我可能遗漏了一些非常简单的东西。

谢谢

在 class 方法中 "self" 是 class 本身。分配实例时([Parse_AccessList_1 alloc])你必须初始化!

编辑:

#import <objc/runtime.h>

...

Class cl = NSClassFromString(@"TestClass");
return [[cl alloc] init];

此returns class 对象。然后调用者可以在那个 class 的对象上实例化或调用 class 方法给它(通过发送 class 方法选择器)。

return [Parse_AccessList_1 class];

让我们假设这是在调用方的某处:

Class clazz = yourObject parser_AccessList];
[clazz performSelector:@selector(someMethod)];

由于 clazz 是类型 Class 的对象,因此应调用相关的 class 方法 someMethod

不过,我相信有更好的方法可以实现您的目标。尝试使用委托模式 and/or 依赖倒置。

此方法(消息):

parser_AccessList

正在 returning:

(Parser *)

这意味着它总是 return 分配 class 类型,所以如果你想 return "any" class 你应该定义你的方法像这样:

+ (id)parser_AccessList

问题在于您不知道应该期待哪个 class,因此您可能会在初始化后对其进行验证。

此外,您确定不需要初始化那些解析器吗?

...
return [[Parse_AccessList_1 alloc] init];
...