我有一个NSArray包含(id)
6种UIModel:按钮,图像等等。
它们都是我的基础模型的子类。例如:
MyButtonModel : MyUIModel : NSObject
所以我想在我的视图中以不同的方式对其进行修改。
for(int i = 0 ; i < [_screenModel.MUIElements count] ; i++)
{
id UIElement = [_screenModel.MUIElements objectAtIndex:i];
[self checkWhatKindOfUIElement:UIElement];
}
-(void)checkWhatKindOfUIElement:(id)MUIElement;
{
if([MUIElement isMemberOfClass:[ButtonModel class]])
NSLog(@"button");
}
所以当然我能够这样做,但是我必须检查它6个ifs吗?没有别的办法吗?
答案 0 :(得分:1)
是的,您必须使用 6 ifs 检查每个派生类,但我不认为您正在使用已经建立的继承模型的强大功能。为什么不以任何你想要的方式使用对象,也许添加公开功能的方法;例如:
for (int i = 0 ; i < [_screenModel.MUIElements count] ; i++)
{
MyUIModel *UIElement = [_screenModel.MUIElements objectAtIndex:i];
[UIElement doThingWithString:@"string"];
if ([UIElement respondsToSelector:@selector(optionalMethod:)])
{
[UIElement optionalMethod:12];
}
if ([UIElement isCapableOfAnything])
{
[UIElement doAnything];
}
}
答案 1 :(得分:0)
这也适用于派生类:
-(void)checkWhatKindOfUIElement:(id)MUIElement;
{
if([MUIElement isKindOfClass:[MyUIModel class]])
NSLog(@"MyUIModel or derived");
}