2014-03-28 76 views
1

我有下面的代碼爲什麼NSString initWithFormat不起作用。錯誤「預期的表達」

NSString * myStr = [[NSString alloc] initWithFormat:@""]; 

但在Xcode我有紅色驚歎號與「預期的表達」。

我已經解決了問題:

[NSString stringWithFormat:@"Number is not from 1 to 6. randomNumber is %d", randomNumber] 

但我想知道是什麼問題。

圖片 http://imgur.com/iICMhYc&S7QwhFT#1enter image description here

由於

+0

是的,我也一樣。你可以請張貼一些代碼 – morroko

+0

@Dinesh,當我評論該行一切正常,當它沒有注意到,我有這個錯誤。我真的不明白爲什麼? – WebOrCode

+0

發佈更多代碼,因爲這一行是正確的。 – Fry

回答

5

在根據Objective-C的規則,如果聲明的caseswitch一個內部的對象必須以圍繞所有的情況下,體括號{}

switch(randomNumber){ 
    case 1:{ 
     break; 
    } 
    default:{ 
     NSString * myStr = [[NSString alloc] initWithFormat:@""]; 
     break; 
    } 
} 
+0

這並不真正回答被問到的問題,機會是OP有一個語法錯誤的上面或下面這條線和Xcode放在它的錯誤。 – Tim

+0

所以,如果我正確地理解你。我已將{}置於默認設置中,並且錯誤消失了。所以這就是問題所在。任何解釋爲什麼? – WebOrCode

+0

閱讀[在switch語句中聲明變量](http://stackoverflow.com/questions/1231198/declaring-variables-inside-a-switch-statement)問題是'case'是一個標籤,並根據語言規則你不能把一個聲明作爲標籤的第一行。 – Fry

1

試試這個:

default:{ 
     NSString * myStr = [[NSString alloc] initWithFormat:@""]; 
     break; 
    } 

同樣與case,如果你想在交換機定義實例,添加{...}

1

除非你附上你不能在switch聲明聲明一個變量。

請注意,原因是switch是一個長的代碼塊,並且該變量似乎在其中聲明,但可能不會沿所有可能的路徑進行初始化。如果您在作爲goto的目標標籤(並注意switch只是一個正式的goto-label設置)的標籤之後聲明變量,則會得到相同的錯誤。

相關問題