假设我有一个枚举定义如下:
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,它不会产生任何错误并具有预期的行为.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。