2015-10-06 91 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