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

前端之家收集整理的这篇文章主要介绍了swift – 使用“如果让…”与许多表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个Swift的成语很有意义
  1. if let x = someDict[someKey] { ... }

但是,我真正想要的是

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

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

Swift 1.2更新

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

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

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

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

以前在Swift 1.2之前有效

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

  1. switch (dict["a"],dict["b"]) {
  2. case let (.Some(a),.Some(b)):
  3. println("match")
  4. default:
  5. println("no match")
  6. }

实际上仍然很冗长

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

  1. enum Optional<T> {
  2. case None
  3. case Some(T)
  4. }

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

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

  1. func unwrap<A,B>(a: A?,b: B?) -> (A,B)? {
  2. switch (a,b) {
  3. case let (.Some(a),.Some(b)):
  4. return (a,b)
  5. default:
  6. return nil
  7. }
  8. }

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

  1. if let (a,b) = unwrap(dict["a"],dict["b"]) {
  2. println("match: \(a),\(b)")
  3. } else {
  4. println("no match")
  5. }

猜你在找的Swift相关文章