Select 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

从外观上看,Swift有一个相当漂亮的
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中并不明显,因为所有示例和描述似乎都在
案例中使用常量值。如果它允许表达式,你应该把它作为一个答案。