2015-10-06 116 views
0

幾天前,我發佈了一個Swift問題(Using Switch with Arrays),並很快找到了一個美麗的答案。從那以後,我一直試圖在腦海中分解這種說法:Swift:分解「case let ...」語句

case let word where excludedWords.contains(word): 

由Swift解析和執行。在我看來,首先評估'讓詞...... ...'部分,並且對於排除的詞中每個詞的出現,Swift都會將其傳回給案例進行評估。我還沒有找到任何文件,蘋果或其他,這解釋到底如何工作。

有人可以給我一個關於這個構造如何在Swift中工作的詳細解釋嗎?

回答

2

language reference(跳轉到交換機語句部分):

switch情況下,可以任選地含有各圖案之後where子句。 A where子句由where關鍵字後跟一個表達式引入,用於在案例中的模式與控制表達式匹配之前提供附加條件。如果存在where子句,則只有在控制表達式的值與案例中的一種模式匹配並且where子句的表達式評估爲true時,纔會執行相關案例中的語句。

我就會在這裏包括回答您的其他問題的情況下:

switch eachWord { 
    case let word where excludedWords.contains(word): 
     // Do Something    
    default: 
     // Do another thing 
} 

的執行將是這樣的:

  1. let word = eachWord
  2. 測試是否excludedWords.contains(word) == true
  3. 如果它是,執行分支。否則,轉到默認分支
+0

我完全理解switch語句的內部工作原理;我在思考如何在切換的上下文中使用'let word'子句時遇到困難。解釋的一部分「如果存在where子句,則僅當控件表達式的值與案例的某個模式相匹配,並且where子句的表達式求值爲true時才執行相關案例中的語句。」是幫助我最終獲得它的缺失部分。非常感謝! –

+0

在這種情況下,它實際上就像一個簡單的「if-else」,但引入了附加變量。 – Sulthan