2017-09-10 66 views
1

我是編程新手,即將完成「Intro to App Development with Swift」iBook。我目前在第19課,枚舉和交換機,並在相關的操場8頁它顯示下面的代碼:枚舉行爲的理解(用Swift介紹應用程序開發 - 第19課)

enum LunchChoice { 
    case pasta, burger, soup 
} 

func cookLunch(_ choice: LunchChoice) -> String { 
    if choice == .pasta { 
     return "" 
    } else if choice == .burger { 
     return "" 
    } else if choice == .soup { 
     return "" 
    } 

    return "Erm... how did we get here?" 
} 

cookLunch(.soup) 

本身,這不是一個問題,我聽不懂,但有一次我打電話cookLunch(.soup) ,最後的回報聲明不顯示。 演習略低於問我:

嘗試改變傳遞給cookLunch值,以便在最終else語句被稱爲

而這正是我卡住了,因爲它似乎不可能通過除了枚舉中的選項以外,它與cookLunch函數不同。

你能幫助我理解這一切背後的意義,也許提供給我一個解決方案?

+0

如果您傳入.soup的值,則會觸發las子句。順便說一句 - 更好的做法是使用switch語句而不是if語句。 – Abizern

+0

是的,這是本書解釋交換機會更好的方式。但仍然,最後一個條款並沒有出現... –

回答

1

你的指示說「使最終else語句被稱爲」。這將是湯回報,而不是「我們如何到達這裏」的回報。正如你所說,有3個午餐選擇和3個if/else語句,其中一個總是會被調用。你必須添加一個沒有相應的第四午餐選擇,否則如果爲了「我們怎麼到這裏」代碼執行。

+1

你的解釋應該在他們的課程中。對於初學者來說,這是一件非常棘手的事情,必須弄清楚。 – Shades

+0

問題是:如果我取消最後一個「返回」語句(我們是如何到達的),整個函數會給我一個錯誤。這個練習已經提供了cookLunch.soup來調用'last'語句,但是告訴我改變一些東西以便調用最後一句。又怎樣? –

+0

不可以。你永遠不可能通過你發佈的代碼來獲得「我們怎麼到這裏」。然而,編譯器不夠聰明。它認爲可能會出現一個情況,即所有'if'情況下的執行都會落到最後。編譯器堅持提供每個可能的「執行路徑」的返回值,所以它會給你一個錯誤。 –

2

你有兩個選擇:

  • 註釋掉第三比較

    // } else if choice == .soup { 
    //  return "" 
    
  • 添加未被覆蓋的比較

    enum LunchChoice { 
        case pasta, burger, soup, steak 
    } 
    

    ,並通過它第四個案例:

    cookLunch(.steak) 
    

但是沒有人會認真地寫出這樣的if - else鏈,在斯威夫特一個switch表達適當

func cookLunch(_ choice: LunchChoice) -> String { 
    switch choice { 
    case .pasta: return "" 
    case .burger: return "" 
    case .soup: return "" 

    default: return "Erm... how did we get here?" 
    } 
} 
+0

而好處然後來自不提供默認,這是一個檢查,以確保您正在處理所有可能提供的值。 – Abizern

相關問題