2014-07-10 170 views
0

我目前正在嘗試使我正在開發的應用程序的代碼更高效,更易於閱讀。基本上這是從NSUserDefaults的玩家名稱中檢索一個數組,並用這些名稱填充6個文本框(標記爲6-11)。如果沒有現有的數組,它將使用另一組名稱。任何想法簡化這個代碼將不勝感激。減少/ if語句的長度

if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { 
     NSMutableArray *names = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"nameArray"]]; 
     for (int i = 0; i <= 5; i++) { 
      NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0]; 
      UITableViewCell *cell = [playerTable cellForRowAtIndexPath:indexPath]; 

      for (UIView *view in cell.contentView.subviews) { 
       if ([view isKindOfClass:[UITextField class]]) { 
        UITextField *txtField = (UITextField *)view; 
        if (txtField.tag == 6) { 
         if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) { 
          txtField.text = [names objectAtIndex:0]; } 
         else { 
          txtField.text = @"Peter"; 
         } 
        } 
        if (txtField.tag == 7) { 
         if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) { 
          txtField.text = [names objectAtIndex:1]; } 
         else { 
          txtField.text = @"Julia"; 
         } 
        } 
        if (txtField.tag == 8) { 
         if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) { 
          txtField.text = [names objectAtIndex:2]; } 
         else { 
          txtField.text = @"Durgan"; 
         } 
        } 
        if (txtField.tag == 9) { 
         if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) { 
          txtField.text = [names objectAtIndex:3]; } 
         else { 
          txtField.text = @"Bob"; 
         } 
        } 
        if (txtField.tag == 10) { 
         if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) { 
          txtField.text = [names objectAtIndex:4]; } 
         else { 
          txtField.text = @"Iseland"; 
         } 
        } 
        if (txtField.tag == 11) { 
         if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) { 
          txtField.text = [names objectAtIndex:5]; } 
         else { 
          txtField.text = @"Player"; 
         } 
        } 
       } 
      } 
     } 
     [self saveNames]; 
    } 
+0

在[http://codereview.stackexchange.com](http://codereview.stackexchange.com)上可能會更好地詢問此問題。 –

+0

謝謝,我已經發布在那裏。 –

回答

5

你可以這樣做:

NSArray *defaultNames = @[@"Peter", @"Julia",...]; 
int offsetIndex = 6; 
BOOl needCustomNames = [[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]; 
for (UIView *view in cell.contentView.subviews) 
{ 
    if ([view isKindOfClass:[UITextField class]]) 
    { 
     UITextField *txtField = (UITextField *)view; 
     int index = [txtField tag]-offsetIndex; 
     if (tag >= 6 && tag <= 11) 
     { 
      if (needCustomNames) 
       textField.text = [names objectAtIndex:index]; 
      else 
       textField.text = [defaultNames objectAtIndex:index]; 
     } 
    } 
} 

例如,你叫太多次在for環相同的路線,就像如果你需要使用或不自定義名稱(NSUserDefaults線)檢查。
我使用NSArray爲自定義名稱模仿相同的邏輯,並使用偏移來澄清它。

+0

很好的答案。但是,如果您的標籤值是隨機的(如2,23,65),那麼您可能會遇到問題。對於一般情況,您可以使用Switch語句。它會簡單快捷。 「switch語句」只會執行正確的情況,並不全是「if語句」。 @Dale Townsend – Yogendra

1

我會推薦分析你的代碼冗餘,並排除他們在不同的方法。所以你必須一次又一次地只調用外部方法而不是每個代碼方。