免责声明: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等)来解释和/或显示等效语言,那就太棒了。
如果已经被问过这个道歉,我在任何地方都没有看到它。
答案 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