如何在Swift case语句中分配变量
这是可行的,但似乎效率低下:如何在Swift case语句中分配变量,swift,Swift,这是可行的,但似乎效率低下: switch var1 { case 1: string1 = "hello" case 2: string1 = "there" default: string1 = "world" } 但是 抛出一个错误。是否有一种更有效的方法来写入开关/大小写,这样分配的变量就不会在每一行中冗余列出 提前谢谢 您可以将开关块放入一个返回字符串对象的函数中,并将此函数的返回赋值给变量string1: func foo(var1: Int) ->
switch var1 {
case 1:
string1 = "hello"
case 2:
string1 = "there"
default:
string1 = "world"
}
但是
抛出一个错误。是否有一种更有效的方法来写入开关/大小写,这样分配的变量就不会在每一行中冗余列出
提前谢谢 您可以将
开关
块放入一个返回字符串
对象的函数中,并将此函数的返回赋值给变量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"
或者,根据sayvar1
的值,将string1
设为计算属性(例如,在某些类中),并将开关
块置于该属性的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
如果在类中使用,只需跳过上面的示例块。将
开关置于匿名闭包中,如果您只在一个位置使用该代码
string1 = {
switch var1 {
case 1:
return "hello"
case 2:
return "there"
default:
return "hello"
}
}()
您可以使用字典而不是switch
语句,这更灵活,因为它允许您以很少的开销添加新值:
let map=[1:“你好”,2:“那里”]
值=映射[var1]??“世界”
或者,在单个语句中,使用默认值下标:
let value=[1:“你好”,
2:“there”][var1,默认值:“world”]
传递给下标调用的default
参数的工作原理与switch
中的default
子句类似。另请参见:目前没有计划将switch
设置为表达式。@MartinR“从概念上讲,这些都是值得支持的有趣的东西,但通过将它们转换为表达式解决的许多问题已经在Swift中以其他方式解决了“正如dfri和汤姆·哈林顿优雅地展示的那样。@Dribbler真是太遗憾了。。我想你,科特林!我发现这在函数语言(如F#或Elixir)中非常优雅。然而,如果能够在不指定某些内容的情况下执行let bla:String
,编译器将强制每个可能的路径指定某些内容。@departmentob哇,太棒了。我不知道这些语言的存在。而且,这样一种嵌入式系统容错语言的存在,我非常想在它里面探索一下。非常感谢,这使编译器无法告诉您switch语句并没有涵盖所有情况。不过,同意使用default
子句,就像询问者发布的代码中一样,也有您提到的陷阱。此外,开关似乎是在一个整数值上,而一个完整的开关有点难写:)我认为这不对,因为自动关闭是自动创建的。此代码段包含闭包,因此没有任何自动操作。
string1 = {
switch var1 {
case 1:
return "hello"
case 2:
return "there"
default:
return "hello"
}
}()