Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift case语句中分配变量_Swift - Fatal编程技术网

如何在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"
或者,根据say
var1
的值,将
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"
    }
}()