Select Swift中的复杂事例值
从外观上看,Swift有一个相当漂亮的Select Swift中的复杂事例值,select,swift,Select,Swift,从外观上看,Swift有一个相当漂亮的switch语句(至少与其他C派生语句相比),您可以使用值、列表、元组、范围等等 它的顺序处理特性使其成为一种非常合乎逻辑的方法,但我想知道它是否支持更多的任意对象进行检查,例如变量和其他通用表达式,例如: let check = 7 switch (value) { case check: println("exact"); case check * 2: println("twice"); case
switch
语句(至少与其他C派生语句相比),您可以使用值、列表、元组、范围等等
它的顺序处理特性使其成为一种非常合乎逻辑的方法,但我想知道它是否支持更多的任意对象进行检查,例如变量和其他通用表达式,例如:
let check = 7
switch (value) {
case check:
println("exact");
case check * 2:
println("twice");
case check * 3:
println("thrice");
case valueInDb("mytable","mycolumn"):
println ("value in database");
default:
println("some other value");
}
你所做的被称为“表达模式” 发件人: 表达式模式表示表达式的值。表达式模式仅出现在switch语句大小写标签中 使用Swift标准库
~=
运算符将表达式模式表示的表达式与输入表达式的值进行比较。如果~=
运算符返回true,则匹配成功。默认情况下,~=
运算符使用=
运算符比较相同类型的两个值
表达模式
→ <代码>表达式
因此,您可以在switch case中使用任何“表达式”,默认情况下,它将使用
==
运算符进行比较。当然!使用这样的表达式而不是常量可能会有点效率低下,因为每次调用都必须对它们进行重新计算,但这绝对是可能的。您可以更进一步,覆盖~=
以与其他对象和值进行比较。@CodaFi,这在Apple站点上的doco中并不明显,因为所有示例和描述似乎都在案例中使用常量值。如果它允许表达式,你应该把它作为一个答案。