2012-02-20 39 views
0

声明在目前,我有大量的if语句像如何更换大规模如果目标C

if ([dicIdentifer isEqualToString:CONF_KEY_CALLMETHOD]) { 
    switch ([[settingDictionary objectForKey:PLIST_VALUE] intValue]) { 
     case CASE_1: 
      cell.detailTextLabel.text = SOME_TEXT_1 
      break; 
     case CASE_2: 
      cell.detailTextLabel.text = SOME_TEXT_2 
      break; 
     case CASE_3: 
      cell.detailTextLabel.text = SOME_TEXT_3 
      break; 
     case CASE_4: 
      cell.detailTextLabel.text = SOME_TEXT_4 
      break; 
     default: 
      break; 
    } 
} else if ([dicIdentifer isEqualToString:CONF_KEY_HTTPMETHOD]) { 
    switch ([[settingDictionary objectForKey:PLIST_VALUE] intValue]) { 
     case CASE_1: 
      cell.detailTextLabel.text = SOME_TEXT_1 
      break; 
     case CASE_2: 
      cell.detailTextLabel.text = SOME_TEXT_2 
      break; 
     case CASE_3: 
      cell.detailTextLabel.text = SOME_TEXT_3 
      break; 
     case CASE_4: 
      cell.detailTextLabel.text = SOME_TEXT_4 
      break; 
     default: 
      break; 
    } 
} ..... 

我有十个以上这种类型的“如果”的声明,现在,这个数字很可能会增加。这工作得很好,但在维护和效率方面我认为可以改进。我从Ways to replace massive if statement with alternative construct in Objective-C读取线程。但它似乎不适合我的情况。如果有人会对我的情况提出建议。

谢谢

+0

您可以随时使用字典,其中键为'CASE'值,实际值为'SOME_TEXT'变量。然后,而不是做一个开关,你可以做一个简单的查找和分配。 – 2012-02-20 14:15:35

回答

1

您链接到的问题中的方法在这里是非常适合的。您只需要两个级别的字典:

NSDictionary *dictionaryForCallMethod = [NSDictionary dictionaryWithObjectsAndKeys:SOME_TEXT_1, [NSNumber numberWithInt:CASE_1], SOME_TEXT_2, [NSNumber numberWithInt:CASE_2], SOME_TEXT_3, [NSNumber numberWithInt:CASE_3], SOME_TEXT_4, [NSNumber numberWithInt:CASE_4], nil]; 
NSDictionary *dictionaryForHTTPMethod = [NSDictionary dictionaryWithObjectsAndKeys:SOME_TEXT_1, [NSNumber numberWithInt:CASE_1], SOME_TEXT_2, [NSNumber numberWithInt:CASE_2], SOME_TEXT_3, [NSNumber numberWithInt:CASE_3], SOME_TEXT_4, [NSNumber numberWithInt:CASE_4], nil]; 
// create additional dictionaries for each branch of your if statement 

NSDictionary *bigDictionary = [NSDictionary dictionaryWithObjectsAndKeys:dictionaryForCallMethod, CONF_KEY_CALLMETHOD, dictionaryForHTTPMethod, CONF_KEY_HTTPMETHOD, nil]; 
// put the other dictionaries in this dictionary as well 

cell.detailTextLabel.text = [[bigDictionary objectForKey:dicIdentifier] objectForKey:PLIST_VALUE];