这有效但似乎效率低下:
switch var1 {
case 1:
string1 = "hello"
case 2:
string1 = "there"
default:
string1 = "world"
}
但
string1 = switch var1 { ...
抛出错误。是否有更有效的方法来编写开关/案例,以便在每一行中没有冗余地列出分配的变量?
提前致谢!
答案 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"
但更短