2011-04-25 39 views
2

我有這樣一段代碼在我的文件之一:怪異「的開關罩」的聲明

switch ([sender tag]){ 
    ... 

    case 100: 
     UIView *v1 = [UIView alloc] initWithFrame blabllabla... 
     [v1 bla bla bla... 
     break; 
    ... 

看起來很標準吧?但它給了我這個錯誤:

"Use of undeclared v1" 

然後,我把一個 「的NSLog()」 或 「if」 語句,像這樣:

case 100: 
    NSLog(@"why need a nslog here?"); 

case 100: 
    if(1==1) { 
     ... 

然後,它的工作原理。

任何人都知道這是爲什麼?它是我的代碼還是Objective-C規則?

+1

這與Objective-C無關; 'label:declaration'不在Objective-C繼承的標準C語法中。 – 2011-04-25 05:39:24

回答

5

如果不使用C塊,則無法聲明範圍限制爲case的變量。更改爲:

case 100: 
{ 
    UIView *v1 = [UIView alloc] initWithFrame blabllabla... 
    [v1 bla bla bla... 
    break; 
} 

它應該工作。

+0

WOWWWW ...它的工作原理!感謝的人,我一直在想這個1小時,我無法弄清楚「爲什麼」大聲笑。無論如何,我需要等待4分鐘才能選擇最佳答案。最好的答案已經保留給你=) – 2011-04-25 05:28:22

+0

'案例100 :;; UIView * v1 ...'也可以。查找C的語法,它在標籤的定義中。你也不能在聲明前加上goto標籤。 – 2011-04-25 08:23:43

+0

@tristopia有趣的。我從來沒有想過'case'引入標籤,但現在你已經提到它是有道理的。 – 2011-04-25 09:05:21