2010-02-09 31 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]);