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

Dri*_*ler 28 swift

这有效,但似乎效率低下:

switch var1 {
case 1:
    string1 = "hello"
case 2:
    string1 = "there"
default:
    string1 = "world"
}
Run Code Online (Sandbox Code Playgroud)

string1 = switch var1 { ...
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Tom*_*ton 70

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

string1 = {
    switch var1 {
    case 1:
        return "hello"
    case 2:
        return "there"
    default:
        return "hello"
    }
}()
Run Code Online (Sandbox Code Playgroud)


dfr*_*fri 17

您可以将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"
Run Code Online (Sandbox Code Playgroud)

或者,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
Run Code Online (Sandbox Code Playgroud)

如果在类中使用,只需跳过上面的Example块.


Moj*_*ini 5

斯威夫特 v5.9

现在您可以直接从表达式中分配值,switch/case例如:

let result = switch range {
    case 0...30: "Low"
    case 31...50: "Medium"
    case 51...80: "Hight"
    default: "Other"
}
Run Code Online (Sandbox Code Playgroud)