1. 程式人生 > >iOS中switch case語句裡面不能定義物件,有語法錯誤,除非加一個花括號

iOS中switch case語句裡面不能定義物件,有語法錯誤,除非加一個花括號

最近發現一個問題呢 發現在switch的case裡面不能去定義物件了,一定義物件就會報錯了

仔細瞭解了一下在C或者C++中,只要是在任何一對花括號 “{ }”中定義的物件,那麼該物件的作用域就侷限在這對花括號裡面,上面的程式碼的錯誤就出現在這兒了。

  1. switch (i) {  
  2.         case0:  
  3.             UIViewController *view = [[UIViewController alloc]init];  
  4.             //。。。。code
  5.             break;  
  6.         case1:  
  7.             //此處如果在使用view的話就會出錯了。。。
  8.             break;  
  9.         default:  
  10.             break;  
  11.     }  


1. view的作用域應該是整個switch語句。 也就是不管case 0 還是case 1,都應該起作用的。

2.加入此時的i 為1,那麼程式會跳過case 0,直接執行case 1。 假如你又在case 1中呼叫物件view,那麼此時的view是沒有初始化 沒有宣告的,自然而然的出錯了。

所以這是一個語法錯誤

3.就是出於這種原因  才有了我們看到的結果,那麼知道了原因 就要解決問題了, 既然view的作用域只想在case 0裡面 那麼我們加個花括號不就好了嗎

此時的程式碼改為以下

  1. switch (i) {  
  2.         case0:  
  3.         {  
  4.             UIViewController *view = [[UIViewController alloc]init];  
  5.             //。。。。code
  6.         }  
  7.             break;  
  8.         case1:  
  9.             //此處如果在使用view的話就會出錯了。。。
  10.             break;  
  11.         default:  
  12.             break;  
  13.     }  
這樣就沒問題了,或者把view宣告在swith語句的前面就OK了。