swift – 有没有办法在switch语句中将变量绑定到多个备选方案?

假设我有一个枚举定义如下:
enum Response {
    case Result(String,Int)
    case Error(String)
}

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

let resp: Response = // ...

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

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

str绑定两次,_表示我对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,它不会产生任何错误并具有预期的行为.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...