¿Puedo usar de alguna manera el enlace opcional para múltiples variables en una línea en Swift?

¿Puedo usar de alguna manera el enlace opcional para múltiples variables en una línea en Swift? Necesito hacer algo como esto:

if let foo = fooOptional && let bar = barOptional { // ... } 

Actualización para Swift 1.2:

Desde Swift 1.2 (Xcode 6.3 Beta), puede desenvolver múltiples opciones con if let :

 if let foo = fooOptional, bar = barOptional { println("\(foo), \(bar)") } 

Antes de Swift 1.2

No puedes con if , pero puedes hacerlo con "Pattern Value Binding" :

 switch (fooOptional, barOptional) { case let (.Some(foo), .Some(bar)): println("\(foo), \(bar)") default: break } 

Es un poco torpe, pero puedes hacer esto con un switch en una tupla de tus variables:

 var fooOptional: String? = "foo" var barOptional: String? = "bar" switch (fooOptional, barOptional) { case let (.Some(foo), .Some(bar)): println(foo + bar) default: break } 

El time que uso esto es profundizar en un dictionary nested, como un gran object JSON, es genial porque puedes manejar cada caso de error por separado:

 switch (dict["foo"], dict["foo"]?["bar"], dict["foo"]?["bar"]?["baz"]) { case let (.Some(foo), .Some(bar), .Some(baz)): // do things case (.None, _, _): // no foo case (_, .None, _): // no bar default: // no baz } 

Antes de Swift 1.2

Me gusta usar la instrucción switch para esto, especialmente si quieres manejar los cuatro casos diferentes.

Sin embargo, si simplemente está interesado en el caso en que ambos son Opcionales, también puede hacer esto:

 if let (firstName, lastName) = unwrap(optionalFirstName, optionalLastName) { println("Hello \(firstName) \(lastName)!") } 

Donde esta es la definición de la function unwrap :

 func unwrap<T1, T2>(optional1: T1?, optional2: T2?) -> (T1, T2)? { switch (optional1, optional2) { case let (.Some(value1), .Some(value2)): return (value1, value2) default: return nil } } 

Más sobrecargas: https://gist.github.com/tomlokhorst/f9a826bf24d16cb5f6a3

Esa es una request de mejora muy razonable, pero como están las cosas no puede hacerlo. Hay varias razones, pero la forma en que me gusta pensar es simplemente esto: if let una palabra en realidad. Son dos palabras, pero la colocación if let significa algo especial, como si fuera una palabra key. Por sí mismo, if tiene un significado diferente; por sí mismo, let tener un significado diferente. Por lo tanto, no puede dejar un let separado más adelante en la línea así.

El resultado es que a menudo termino con cascadas de cláusulas anidadas if let . Estoy seguro de que la razón de su pregunta es que usted también lo hace y desea evitarlo. Pero no puedes. Una alternativa es omitir el " if let total, forzar y desenvolver sus opciones, y esperar que no se bloquee cuando uno de ellos es nulo.