为什么Swift允许非恒定的开关标签?

时间:2014-06-03 22:19:15

标签: switch-statement swift

首先我被Swift鼓励,因为最后你可以使用字符串编写switch语句,这意味着基于字典的代码现在几乎可读。

let kMyDictionaryKey1 = "one"  // use 'let' to declare constant dictionary key
let kMyDictionaryKey2 = "two"  // use 'let' to declare constant dictionary key

println( "hello world" );

if ( true )
{
    var dictionary = [kMyDictionaryKey1: 1, "two": 2, "three": 3]

    for val in dictionary.keys {
        switch val {
        case kMyDictionaryKey1:
            println( "yay switch on Key1" )
            break

        case kMyDictionaryKey2:
            println( "yay switch on Key2" )
            break

        default :
            println("world" )
            break
        } // end switch
    }
}

以上代码效果很好。

但是,我也注意到你可以将变量作为案例标签。例如,您可以声明

var kMyDictionaryKey1 = "one"

有些情况下我想要这样做,但它似乎也很危险。 它可能会导致代码草率和重复的开关标签。大多数语言不允许这样做,重复标签是编译时错误。

是否有其他语言允许案例标签的变量?

1 个答案:

答案 0 :(得分:1)

切换语句是一种更具表现力的形式,可能是您以前使用长if... else if... else if...语句链的形式,因此能够在case语句中使用变量,字符串和表达式。

您可以拥有多个具有相同大小写的case语句,但第一个匹配的大小写总是执行的大小写。

此外,在Swift中,switch语句没有任何后果,因此不需要使用break语句。

var testVal = "one"

var result = 0

switch(testVal)
{
case "one":
    result = 1
case "one":
    result = 2
default:
    result = 3
}

result // the result is 1