2013-06-21 34 views
-4

我已經用if/else重寫了這個,但它打擾了我,希望有人能教育我。我有以下switch語句:如果表達式返回true/false,爲什麼我不能在一個case中使用它?

switch(true) 
    { 
    case [request.URL.absoluteString isEqualToString:secondMapUrl]: 
     return NO; 
     break; 
    case [request.URL.absoluteString isEqualToString:mapUrl]: 
     [self openMapViewController]; 
     return NO; 
    default: 
     return YES; 
    } 

從而未能與「表達式不是整型常量表達式」 - 但這些情況評估爲真/假,您可以使用,即。 case true: - 有沒有辦法讓switch語句以這種方式工作?

+5

關鍵字:「常量」... – 2013-06-21 21:47:44

+0

http://www.programiz.com/c-programming/c- switch-case-statement可以很好地解釋H2CO3的含義。 –

回答

3

編譯器需要能夠編譯結果,其中方法不返回常量(它們返回的動態結果可能爲YES或可能爲NO)。

「開關」在這種情況下不合適。

而且在關鍵字(這本身是一個常數,意味着在某些語言中的某些東西,編譯器支持)做一個「switch(true)」,我甚至不認爲這是有效的。如果您確實有一個名爲「true」的變量,則應該將其更改爲具有更明智的變量名稱。

0

你不能比較像這樣的字符串與開關,你只能做常量,如int/bool/char。只有兩行就像我會做,如果有其他或如果你有很多行某種形式的數組和循環來檢查。即使你的開關是可能的,開關(true)也必須改爲request.URL.absoluteString。字開關之後的變量是字後例子將被檢查的東西

switch (my_Int) { 
case 0: do something; break; 
case 1: do something else; break; 
} 
相關問題