2010-02-09 33 views
1

我試圖簡化開關語句,它需要大量空間和時間來編寫。在代碼中,你會明白的。如果沒有,我會稍後解釋。簡化開關語句(Objective-C)

// When row is selected 
- (void)pickerView:(UIPickerView *)pickerTimer didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

    switch (row) { 
     case 0: 
      NSLog(@"It obviously worked.0"); 
      break; 
     case 1: 
      NSLog(@"It obviously worked.1"); 
      break; 
     case 2: 
      NSLog(@"It obviously worked.2"); 
      break; 
     case 3: 
      NSLog(@"It obviously worked.3"); 
      break; 
     case 4: 
      NSLog(@"It obviously worked.4"); 
      break; 
     case 5: 
      NSLog(@"It obviously worked.5"); 
      break; 
     case 6: 
      NSLog(@"It obviously worked.6"); 
      break; 
     default: 
      NSLog(@"It did kindof work.NIL"); 
      break; 
    } 
} 

有什麼辦法可以簡化這個嗎?只是這樣做,

NSLog(@"It did work! %@", row); 

爲了記錄,我試過了,並沒有奏效。

回答

8

整數的格式說明符是%d - %@指定了一個對象。爲了安全起見,當您將它傳遞給printf()(因此您會寫@"%d", (int)row)時,您應該將NSInteger轉換爲int,因爲NSInteger的大小不能保證爲%d說明符告知printf()預期的大小。

順便說一句,您不需要爲每個案例聲明重複它。如果不休息,控制權將落到下一個案件。

+0

哈,我是這樣的noob .. 是否有格式說明符等地方的任何概述? 謝謝:) – Emil 2010-02-09 19:37:36

+0

只需在C printf上進行搜索,它不會列出%@,但它包含了其他所有內容。 – 2010-02-09 19:52:46

+1

@Emil:此鏈接包含Core Foundation支持的所有格式說明符:http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265。 – dreamlax 2010-02-09 23:49:18

6

像查克說,你可以做...

NSLog(@"It did work! %d", row); 

...或者你可以看中,並把它變成一個對象...

NSLog(@"It did work! %@", [NSNumber numberWithInt:row]);