在许多表达式中使用“ if let…”
Swift的这个成语很有道理
if let x = someDict[someKey] { ... }
但是,我 真正 想要的是
if let x = someDict[someKey], y = someDict[someOtherKey] { ... }
如所写,这不是不正确的,但是这个想法可行吗?
回答:
从Swift 1.2开始,if let
允许展开多个可选选项,因此您现在可以编写此代码,如示例所示:
if let x = someDict[someKey], y = someDict[someOtherKey] { … }
您甚至可以交错条件,例如:
if let x = someDict[someKey] where x == "value", y = someDict[someOtherKey] { … }
这是在没有难看的强制包扎的情况下的方法:
switch (dict["a"], dict["b"]) {case let (.Some(a), .Some(b)):
println("match")
default:
println("no match")
}
实际上,它仍然很冗长。
之所以Type?
可行Optional<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")
}
以上是 在许多表达式中使用“ if let…” 的全部内容, 来源链接: utcz.com/qa/412101.html