我有一个函数可以创建一些不同的NSOperation子类。
它们都使用相同的参数,唯一不同的是类名。
目前我已经有了一个函数,其中包含一个重复的代码块。是否可以将Class传递给函数,以便函数可以为我创建对象?
即
- (void)createOperationSubclass:(Class*)class withParam:(int)parameter
{
class *operation = [[class alloc] init];
operation.parameter = parameter;
[self.queue addOperation:operation];
}
或类似的东西?即一个不关心类是什么的通用类加载器。
然后我可以跑...
[self createOperationSubclass:MyOperationSubclass withParam:10];
[self createOperationSubclass:MyOtherOperationSubclass withParam:5];
答案 0 :(得分:2)
为什么不进行if / else组合,看看你用哪个班级
if ([myObject isKindOfClass:[AnObject class]]) {
// create object
}
那会不会那么容易?
答案 1 :(得分:2)
试试这个:
- (void)createOperationSubclass:(Class)aClass withParam:(int)parameter
{
id operation = [[aClass alloc] init];
[operation setParameter:parameter];
// If your parameter is an NSNumber: [operation setParameter:@(parameter)];
[self.queue addOperation:operation];
}
然后你就这样称呼它:
[self createOperationSubclass:[WhateverClass class] withParam:1];
PS:请注意,class
是保留关键字,因此已更改为aClass
答案 2 :(得分:2)
使用像
这样的API NSStringFromClass(Class aClass);
或
NSClassFromString(NSString *aClassName);