在许多表达式中使用“ 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

回到顶部