免责声明:swift noob
嗨,我刚刚开始学习Swift,并且正在通过Swift编程语言(WWDC发布的苹果书),并且想知道“where”关键字是什么。它被用于
let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some raisins and make ants on a log." case "cucumber","watercress": let vegetableComment = "That would make a good tea sandwich." case let x where x.hasSuffix("pepper"): let vegetableComment = "Is it a spicy \(x)?" default: let vegetableComment = "Everything tastes good in soup." }
摘录自:苹果公司“Swift编程语言”iBooks。 https://itun.es/us/jEUH0.l
如果有人可以用另一种语言(java,c,obj-c等)来解释和/或显示出相当的东西,那将是很棒的。
道歉,如果这已经被问到,我没有看到任何地方。
Swift的switch语句比大多数其他语言使用的语句更强大。它们不是简单地从一组值中选择,而是使用模式匹配来选择要评估的情况。我们来看看你的例子中的每个案例:
case "celery":
超级简单 – 这将匹配字符串“芹菜”,没有别的。
case "cucumber","watercress":
这种情况将匹配字符串“cucumber”或字符串“watercress”。凉。在其他语言中,您可能需要使用一个突破性的案例来获得这两个。
case let x where x.hasSuffix("pepper"):
这个例子包含了与Java和C进行比较时Swift switch语句特有的两个概念。第一个是值绑定 – 这个语句的let x部分将匹配的值绑定到一个范围x的范围内。
接下来是where子句。这是一个布尔测试,就像if语句一样,所以如果表达式为true,则仅匹配。在这个例子中,x.hasSuffix(“pepper”)查看绑定的值,并检查它是否以“胡椒”结尾。字符串“红辣椒”,“青椒”和“辣辣椒”都会匹配,但“胡椒”不会。
default:
在Swift中,switch语句需要耗尽匹配值的所有可能值,因此它们通常以默认值:case块结束,以处理之前未匹配的任何值。唯一的时候,你不会看到这一点,如果你只匹配一个枚举只有几个值,因为你可以手动耗尽所有的选项。