Estoy desenvolviendo dos valores de un diccionario y antes de usarlos tengo que convertirlos y probar el tipo correcto. Esto es lo que se me ocurrió:
var latitude : AnyObject! = imageDictionary["latitude"]
var longitude : AnyObject! = imageDictionary["longitude"]
if let latitudeDouble = latitude as? Double {
if let longitudeDouble = longitude as? Double {
// do stuff here
}
}
Pero me gustaría empacar los dos si dejo consultas en uno. Para que sea algo así:
if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
// do stuff here
}
Esa sintaxis no funciona, así que me preguntaba si había una hermosa manera de hacerlo.
if-statement
swift
optional
Suntoch
fuente
fuente
Respuestas:
Actualización para Swift 3:
Lo siguiente funcionará en Swift 3:
Solo asegúrese de recordar que si uno de los intentos de enlaces opcionales falla, el código dentro del
if-let
bloque no se ejecutará.Nota: no todas las cláusulas deben ser cláusulas 'let', puede tener cualquier serie de controles booleanos separados por comas.
Por ejemplo:
Swift 1.2:
Es posible que Apple haya leído su pregunta, porque su código esperado se compila correctamente en Swift 1.2 (en beta hoy):
Swift 1.1 y versiones anteriores:
Aquí están las buenas noticias: puedes hacer esto totalmente. Una declaración de cambio en una tupla de sus dos valores puede usar la coincidencia de patrones para convertirlos a ambos
Double
al mismo tiempo:Actualización: esta versión del código ahora funciona correctamente.
fuente
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {...}
. ¿El segundolet
también es vinculante opcional? Quiero decir,app
ya no es un opcional. ¿Derecha?app
ya no es opcional, pero suwindow
propiedad es (su tipo esUIWindow?
), así que eso es lo que estás desenvolviendo.Con Swift 3, puede usar el encadenamiento opcional, la declaración de cambio o el patrón opcional para resolver su problema.
1. Uso
if let
(encuadernación opcional / encadenamiento opcional)El lenguaje de programación Swift establece el encadenamiento opcional:
Por lo tanto, en el caso más simple, puede usar el siguiente patrón para usar múltiples consultas en su operación de encadenamiento opcional:
2. Uso de tuplas y enlace de valor en una declaración de cambio
Como alternativa a un simple encadenamiento opcional, la instrucción switch puede ofrecer una solución de grano fino cuando se usa con tuplas y enlaces de valor:
3. Uso de tuplas con
if case
(patrón opcional)if case
( patrón opcional ) proporciona una forma conveniente de desenvolver los valores de enumeración opcional. Puede usarlo con tuplas para realizar algunos encadenamientos opcionales con múltiples consultas:fuente
Swift 3.0
fuente