swift – 使用“如果让…”与许多表达式

这个Swift的成语很有意义
if let x = someDict[someKey] { ... }

但是,我真正想要的是

if let x = someDict[someKey],y = someDict[someOtherKey] { ... }

写的这样做并不正确,但这个想法是可能的吗?

Swift 1.2更新

从Swift 1.2开始,如果允许允许展开多个可选项,那么现在可以写下这个,如下例所示:

if let x = someDict[someKey],y = someDict[someOtherKey] { … }

您甚至可以交换条件,如:

if let x = someDict[someKey] where x == "value",y = someDict[someOtherKey] { … }

以前在Swift 1.2之前有效

没有一个丑陋的力量包装,你可以这样做:

switch (dict["a"],dict["b"]) {
case let (.some(a),.some(b)):
    println("match")
default:
    println("no match")
}

实际上仍然很冗长

这是因为可选类型的表单类型?实际上是可选的< Type>的缩写,这是一个大致如下的枚举:

enum Optional<T> {
    case None
    case Some(T)
}

然后,您可以使用模式匹配作为任何其他枚举。

编辑:我看到人们写这样的帮助函数(抱歉因为缺乏归因,我不记得我在哪里看到了)

func unwrap<A,B>(a: A?,b: B?) -> (A,B)? {
    switch (a,b) {
    case let (.some(a),.some(b)):
        return (a,b)
    default:
        return nil
    }
}

那么你可以继续使用if let构造,就是这样:

if let (a,b) = unwrap(dict["a"],dict["b"]) {
    println("match: \(a),\(b)")
} else {
    println("no match")
}

相关文章

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