如何在Swift案例语句中分配变量

时间:2016-01-14 22:11:39

标签: swift

这有效但似乎效率低下:

switch var1 {
case 1:
    string1 = "hello"
case 2:
    string1 = "there"
default:
    string1 = "world"
}

string1 = switch var1 { ...

抛出错误。是否有更有效的方法来编写开关/案例,以便在每一行中没有冗余地列出分配的变量?

提前致谢!

3 个答案:

答案 0 :(得分:55)

如果您只在一个地方使用该代码,请将switch置于匿名闭包中。

string1 = {
    switch var1 {
    case 1:
        return "hello"
    case 2:
        return "there"
    default:
        return "hello"
    }
}()

答案 1 :(得分:10)

您可以将switch块放在返回String对象的函数中,并将此函数的返回值分配给变量string1

func foo(var1: Int) -> String {
    switch var1 {
    case 1:
        return "hello"
    case 2:
        return "there"
    default:
        return "world"
    }
}

/* Example */
var var1 : Int = 1
var string1 : String = foo(var1) // "hello"
var1 = 2
string1 = foo(var1)              // "there"
var1 = 5000
string1 = foo(var1)              // "world"

或者,让string1成为计算属性(例如在某个类中),具体取决于say var1的值,并将switch块放在此属性的getter中。在操场上:

var var1 : Int
var string1 : String {
    switch var1 {
    case 1:
        return "hello"
    case 2:
        return "there"
    default:
        return "world"
    }
}

/* Example */
var1 = 1
print(string1) // hello
var1 = 2
print(string1) // there
var1 = 100
print(string1) // world

如果在课堂上使用,只需跳过上面的示例块。

答案 2 :(得分:-1)

您可以使用dictionary而不是switch语句,这样更通用,因为它允许您以较少的开销添加新值:

let map = [1: "hello", 2: "there"]
map[var1] ?? "world"

??nil coalescing operator,如果

,则相当于以下三元组
map[var1] != nil ? map[var1] : "world"

但更短