2

我有一个 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 吗?有没有别的办法?

4

2 回答 2

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];
    }
}
于 2012-07-19T12:32:42.907 回答
0

这也适用于派生类:

-(void)checkWhatKindOfUIElement:(id)MUIElement;
{
    if([MUIElement isKindOfClass:[MyUIModel class]])
        NSLog(@"MyUIModel or derived");
}
于 2012-07-19T12:17:14.147 回答