【发布时间】:2014-06-21 10:58:11
【问题描述】:
假设我有一个 motheclass(抽象与否)Item 和两个子类 ItemA 和 ItemB 都继承自 Item
所有实例都是通过下面的方法基于一个NSDictionary创建的
-(id)initWithJSON:(NSDictionary *)d{
//first instantiate common properties from the motherclass
if ([super initWithJSON:d]){
//Do specific stuff for the subclass
}
return self;
}
现在假设我从 web 服务中获取一个数组,该数组可以包含要创建的 ItemA 和 Item。
目前我所做的是使用 if/then 条件来确定我将根据字典内容实例化哪个子类,例如:
[(NSArray*)data enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj[@"kind"] isEqualToString:@"A"])
[interactions addObject:[[ItemA alloc] initWithJSON:obj]];
else if ([obj[@"kind"] isEqualToString:@"B"])
[interactions addObject:[[ItemB alloc] initWithJSON:obj]];
else
[interactions addObject:[[Item alloc] initWithJSON:obj]];
}];
现在我的观点如下:有没有一种方法只有一行代码会 - 默认情况下 - 实例化一个 Item 对象,并基于 ItemA 或 ItemB 换句话说,如果在解析的 NSDictionary 参数中满足某些条件,我可以在母类 Item 的 init 方法中编写一些代码来实例化子类吗?
谢谢
【问题讨论】:
-
A 和 B 始终是 Item,所以只需 caat 并忽略它们是 A 还是 B。
-
@MarcoAcierno 我不明白
标签: ios objective-c class inheritance initialization