Objective-C - 返回给定类类型的工厂?

标签 objective-c generics

使用 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/

相关文章:

objective-c - NSTextView 不调用 controlTextDidChange :

java - java中的通用通配符。编译错误。

c# - 是否可以强制泛型类从两个接口(interface)之一继承类型?

c# - 如何避免值类型的装箱

generics - 通用可克隆/可移动参数作为函数参数

ios - 按钮不会在循环之前隐藏

ios - Iphone 应用程序中的 Google 图像搜索集成

ios - 将 PDF 转换为一页 PDF 原因是 PDF 页面没有相同的页面高度

c# - 如何使用 LINQ 对通用列表中的值求和?

ios - iOS REST 调用的身份验证问题