gpt4 book ai didi

swift - 有没有办法在 switch 语句中将变量绑定(bind)到多个替代项?

转载 作者:IT王子 更新时间:2023-10-29 05:51:40 26 4
gpt4 key购买 nike

假设我有一个枚举定义如下:

enum Response {
case Result(String, Int)
case Error(String)
}

然后,我得到这样的回应:

let resp: Response = // ...

假设我想编写一个 switch 语句并以相同的方式处理 Result 和 Error 情况,并将同名变量绑定(bind)到它们包含的 String 。我怎样才能做到这一点?从概念上讲,类似于此:

switch resp {
case let .Result(str, _), let .Error(str):
println("Found: \(str)")
}

其中 str 被绑定(bind)了两次,而 _ 表示我对 Result< 的 Int 值不感兴趣 携带。

到目前为止,我能找到的最接近的方法是像这样声明一个内联函数然后调用它:

func processRespString(str: String) {
println("Found \(str)")
}

switch resp {
case let .Result(str, _): processRespString(str)
case let .Error(str): processRespString(str)
}

有没有更好的办法?

最佳答案

Swift evolution Proposal SE-0043已被接受,解决了 Swift 3 的这个问题。

enum Response {
case result(String, Int)
case error(String)
}

let resp = Response.error("Some text")

switch resp {
case let .result(str, _), let .error(str):
print("Found: \(str)") // prints Found: Some text
}

使用 Swift 2,以前的 Playground 代码会产生错误:具有多个模式的 case 标签无法声明变量。但是,对于 Swift 3,它不会产生任何错误并且具有预期的行为。

关于swift - 有没有办法在 switch 语句中将变量绑定(bind)到多个替代项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com