替代目标C中的switch语句

时间:2011-11-09 05:06:58

标签: objective-c ios cocoa-touch uitableview switch-statement

我正在做一个项目,我在其中使用来自异步连接的JSON数据加载表视图。我使用switch语句来加载每一行,如下所示:

dictionaryData = [responseString JSONValue]; 
switch (indexPath.row) 
{ 
    case 0: 
    { 
        NSString *name = [NSString stringWithFormat:@"%@ : %@ %@",@"Name",[dictionaryData      valueForKey:@"firstName"],[dictionaryData valueForKey:@"lastName"]]; 
        cell.textLabel.text = name;
        break; 
    }
    case 1: 
    { 
        NSString *email = [NSString stringWithFormat:@"%@ : %@",@"Email",[dictionaryData   valueForKey:@"email"]]; 
        cell.textLabel.text = email; } 
        break;

有8行,我必须编写8个开关案例,我认为我的方法太长了。 任何人都可以告诉我,有任何替代switch语句。

3 个答案:

答案 0 :(得分:3)

用阵列替换您的开关。数组中的每个索引都对应于前case之一。应使用您需要的键设置数组

keyArray = [NSArray arrayWithObjects:@"Name", @"Email", ..., nil];

dictionaryData = [responseString JSONValue];

NSString * rowKey = [keyArray objectAtIndex:[indexPath row]];
[[cell textLabel] setText:[dictionaryData objectForKey:rowKey]];

答案 1 :(得分:1)

switch的替代方法是使用一系列if / else语句,这些语句不会使代码更短。如果您的方法太长或太复杂,请将每个案例的主体移动到自己的方法中,然后从相应的案例中调用该方法。

答案 2 :(得分:1)

在某些情况下,对象将是更好的选择。

<强>更新

我详细介绍了如何在这里(以过度设计的方式)解决这个问题: What alternatives to a switch statement could I use to update my UITableViewCells?