使用C#或Java等语言的泛型,您可以拥有一个根据给定类型返回结果的工厂?例如,您可以告诉工厂方法返回:
Book
List<Book>
Door
List<Door>
是否有可能用objective-c实现相同的目标?
我能以某种方式告诉generateObjects
方法给我一系列书籍吗?
[self getDataFromWeb:@"SOME_URL" andReturnResultWithType:[Book class]];
// What about an array of Books?
- (id)getDataFromWeb:(NSString*)url andReturnResultWithType:(Class)class
{
// Convert JSON and return result
// Mapping conversion is a class method under each contract (Book, Door, etc)
}
假设这是我的数据合同之一
@interface Book : JSONContract
@end
@implementation Book
+ (NSDictionary *)dataMapping
{
// returns an NSDictionary with key values
// key values define how JSON is converted to Objects
}
@end
修改
修改示例更清晰
答案 0 :(得分:4)
不,不可能说您的数组将包含String 但是,是的,可以根据类定义甚至类名创建String。
Objective-C作为Java的“反射”功能,它被称为“内省”
例如,您可以使用此代码
基于其类名创建对象NSString* myString = (NSString*)[[NSClassFromString(@"NSString") alloc] init];
NSClassFromString在此处记录: https://developer.apple.com/library/mac/#documentation/cocoa/reference/foundation/miscellaneous/foundation_functions/reference/reference.html
如果您希望编译器为您检查类型,您也可以直接使用Class对象,如此
Class stringClass = [NSString class];
NSString* myString = [[stringClass alloc] init];
答案 1 :(得分:1)
是的,NSArray和NSMutableArray存储id类型的对象,这意味着您可以在其中放置任何内容并将其返回给用户。您只需检查传入的参数以分支您的逻辑,以生成您放入数组中的对象。
您的评论暗示这是为了转换JSON?要转换JSON,您必须有一系列条件来检查值是否类似于数字,字符串等。因此,您可以添加一个条件,指出如果类参数是NSString类,那么只需假设JSON值是一个字符串。