转发所选 class 以用于另一个 class
Forward selected class to use in another class
我有点脑残。我希望有人能帮助我。
我有一个可以与不同设备通信的应用程序。根据它与哪个设备通信,我需要使用不同的方法。
我有几个不同的 classes 做一些解析,我已经将 class 的子 classes 称为 Parse
(不要与解析云服务),这些只有 Class 个方法。例如Parse_Device1
Parse_Device2
我有第三个 class(我们称它为 Selection
),它 return 有各种不同的东西,具体取决于应用程序与之通信的设备。
我怎样才能拥有这个 class return 所需的 Parse
subclass 并使用 returned?
我知道我可以轻松 alloc
和 init
需要的 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];
...
我有点脑残。我希望有人能帮助我。
我有一个可以与不同设备通信的应用程序。根据它与哪个设备通信,我需要使用不同的方法。
我有几个不同的 classes 做一些解析,我已经将 class 的子 classes 称为 Parse
(不要与解析云服务),这些只有 Class 个方法。例如Parse_Device1
Parse_Device2
我有第三个 class(我们称它为 Selection
),它 return 有各种不同的东西,具体取决于应用程序与之通信的设备。
我怎样才能拥有这个 class return 所需的 Parse
subclass 并使用 returned?
我知道我可以轻松 alloc
和 init
需要的 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];
...