使用 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)
}
假设这是我的一份数据契约(Contract)
@interface Book : JSONContract
@end
@implementation Book
+ (NSDictionary *)dataMapping
{
// returns an NSDictionary with key values
// key values define how JSON is converted to Objects
}
@end
编辑:
修改示例使其更清晰
最佳答案
不,不可能说你的数组将包含字符串 但是,是的,可以根据类定义甚至类名创建字符串。
Objective-C像Java一样具有“反射”能力,所以叫做“内省(introspection)”
例如,您可以使用此代码根据其类名创建一个对象
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];
关于Objective-C - 返回给定类类型的工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901660/