斯威夫特“哪里”关键词

时间:2014-08-16 01:08:05

标签: swift switch-statement

免责声明:swift noob

嗨,我刚刚开始学习Swift并且正在学习Swift编程语言(Apple在WWDC期间发布的书),并且想知道'哪里有什么'关键字是。它用于

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."
}

摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/us/jEUH0.l

如果有人能用另一种语言(java,c ++,obj-c等)来解释和/或显示等效语言,那就太棒了。

如果已经被问过这个道歉,我在任何地方都没有看到它。

2 个答案:

答案 0 :(得分:43)

Swift的switch语句比大多数其他语言中使用的语句强大得多。他们使用模式匹配来选择要评估的case,而不是简单地从一组值中进行选择。让我们看看你的例子中的每个case

case "celery":

超级简单 - 这将匹配字符串"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")查看绑定值并检查它是否以"pepper"结尾。字符串"red pepper""green pepper""spicy hot pepper"都匹配,但"peppercorns"不匹配。

default:

在Swift中,switch语句需要耗尽匹配值的所有可能值,因此它们通常以default:大小写块结束,以处理之前未匹配的任何值。唯一一次你不会看到这个,如果你只用enum匹配只有几个值,因为你可以手动耗尽所有选项。

答案 1 :(得分:16)

您可以在单个if语句中包含多个可选绑定,并使用where子句检查布尔条件:

if let firstNumber = Int("4"), secondNumber = Int("42") where firstNumber < secondNumber {
    print("\(firstNumber) < \(secondNumber)")
}
// prints "4 < 42