【问题标题】:Alternative to switch statement in objective C替代目标 C 中的 switch 语句
【发布时间】:2011-11-09 05:06:57
【问题描述】:

我正在做一个项目,其中我正在从异步连接加载带有 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 case,我认为这使我的方法太长了。 谁能告诉我是否有任何替代 switch 语句的方法。

【问题讨论】:

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


    【解决方案1】:

    将您的开关替换为数组。数组中的每个索引将对应于以前的cases 之一。数组应该设置你需要的键

    keyArray = [NSArray arrayWithObjects:@"Name", @"Email", ..., nil];
    
    dictionaryData = [responseString JSONValue];
    
    NSString * rowKey = [keyArray objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:[dictionaryData objectForKey:rowKey]];
    

    【讨论】:

      【解决方案2】:

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

      更新

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

      【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我们中的一个人误解了这个问题,但我不知道是哪个。 :)
      • 其实每个 switch case 都是 2-3 行,所以可以有单独的 8 个方法而不是一个方法。您的建议是什么,因为我的方法中已经有 10-12 行代码而无需切换,会更好吗?我想它会让程序更便携!
      • @iDev,每个只有几行的 8 个案例的开关没有任何问题。如果您对每个案例的不同数据执行相同的操作,乔什·卡斯韦尔的解决方案也是一个不错的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-18
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多