Iphone 消除foreach循环中的switch语句

Iphone 消除foreach循环中的switch语句,iphone,objective-c,anti-patterns,Iphone,Objective C,Anti Patterns,我对在一个UIView中使用“.tags”查找子视图有疑问 for (UIView *viewObj in [self.view subviews]) { // want to find viewObject by its tag. // but I heard for-switch or for-case paradigm are bad pattern design by WTF. // there are total 9 of tags will be use for f

我对在一个UIView中使用“.tags”查找子视图有疑问

for (UIView *viewObj in [self.view subviews])
{
   // want to find viewObject by its tag.
   // but I heard for-switch or for-case paradigm are bad pattern design by WTF.
   // there are total 9 of tags will be use for finding view object
   switch (viewObj.tag)
   {
         case 0:
         .
         ..
         ...
   }
}
如何使其成为非开关或非if语句?我应该只添加到一个数组中,然后从那里获取吗?例如,添加带有所需标记的视图,并从此数组中提取


谢谢。

从您的评论来看,这是一组非常有限的项目——9项。如果这是静态的,switch语句就没有什么真正的错误。也许您可以在功能上将每个开关分解为一个单独的方法。也就是说,除了你的数组思想之外,命令模式可能是一种需要考虑的方法。仅供参考:

根据您的评论,这是一组非常有限的项目-9项。如果这是静态的,switch语句就没有什么真正的错误。也许您可以在功能上将每个开关分解为一个单独的方法。也就是说,除了你的数组思想之外,命令模式可能是一种需要考虑的方法。参考:

您可以做的一件事是,通过使每个视图符合相同的协议,使
子视图中的
UIView
具有相同的类型。然后,您可以将每个方法强制转换为
id
,并在每个
UIView
中调用相同的方法

您可以做的一件事是使
子视图中的
UIView
s符合相同的协议,从而使它们具有相同的类型。然后,您可以将每个方法强制转换为
id
,并在每个
UIView
中调用相同的方法

为了进一步说明Shan的答案,如果您可以将它们分解为函数并将它们(函数指针)放入数组中,那么您可以将其简化一点,或者您可以使用新的语言功能。

为了进一步说明Shan的答案,如果您可以将它们分解为函数并将它们(函数指针)放入数组中,然后,您可以将其简化一点,或者可以使用新的语言功能。

如果只是固定数量的视图,并且每个视图都有需要执行的不同方法,您可以直接访问这些视图

UIView* someView = [self.view viewWithTag:0];
//Operations on view 0


UIView* someOtherView = [self.view viewWithTag:1];
//Operations on view 1

//...

如果只是固定数量的视图,并且每个视图都有需要执行的不同方法,则可以直接访问这些视图

UIView* someView = [self.view viewWithTag:0];
//Operations on view 0


UIView* someOtherView = [self.view viewWithTag:1];
//Operations on view 1

//...

有一个新的IBOutlet类型,IBOutletCollection。您将其用于NSArray,然后在IB中您可以将视图添加到该出口-在运行时,它们将全部放入数组(无序)


要获取所需的特定条目,在viewDidLoad中,您可以将所有NSArray条目映射到由标记值键入的字典中,然后只需使用“objectForKey”将其取出。

有一种新的IBOutlet类型,即IBOutletCollection。您将其用于NSArray,然后在IB中您可以将视图添加到该出口-在运行时,它们将全部放入数组(无序)


要获取所需的特定条目,可以在viewDidLoad中将所有NSArray条目映射到由标记值键入的字典中,然后只需使用“objectForKey”把他们弄出来。

你完全正确,感谢设计模式的修改。考虑到环境,我会选择做最务实的事情。你完全正确,感谢设计模式的修改。考虑到环境,我会选择做最务实的事情