iOS中switch case語句裡面不能定義物件,有語法錯誤,除非加一個花括號
阿新 • • 發佈:2019-01-29
最近發現一個問題呢 發現在switch的case裡面不能去定義物件了,一定義物件就會報錯了
仔細瞭解了一下在C或者C++中,只要是在任何一對花括號 “{ }”中定義的物件,那麼該物件的作用域就侷限在這對花括號裡面,上面的程式碼的錯誤就出現在這兒了。
- switch (i) {
- case0:
- UIViewController *view = [[UIViewController alloc]init];
- //。。。。code
- break;
- case1:
-
//此處如果在使用view的話就會出錯了。。。
- break;
- default:
- break;
- }
1. view的作用域應該是整個switch語句。 也就是不管case 0 還是case 1,都應該起作用的。
2.加入此時的i 為1,那麼程式會跳過case 0,直接執行case 1。 假如你又在case 1中呼叫物件view,那麼此時的view是沒有初始化 沒有宣告的,自然而然的出錯了。
所以這是一個語法錯誤
3.就是出於這種原因 才有了我們看到的結果,那麼知道了原因 就要解決問題了, 既然view的作用域只想在case 0裡面 那麼我們加個花括號不就好了嗎
此時的程式碼改為以下
- switch (i) {
- case0:
- {
- UIViewController *view = [[UIViewController alloc]init];
- //。。。。code
- }
- break;
- case1:
- //此處如果在使用view的話就會出錯了。。。
- break;
- default:
- break;
-
}