swift - statement - Coincidencia de patrón y vinculación condicional en una sola instrucción Switch
switch swift 4 (1)
¿Hay alguna manera de escribir este if
/ else if
/ else
ladder como una instrucción switch?
let x: Any = "123"
if let s = x as? String {
useString(s)
}
else if let i = x as? Int {
useInt(i)
}
else if let b = x as? Bool {
useBool(b)
}
else {
fatalError()
}
Aquí está mi intento:
switch x {
case let s where s is String: useString(s)
case let i where i is Int: useInt(i)
case let b where b is Bool: useBool(b)
default: fatalError()
}
Elige con éxito el camino correcto, pero s
/ i
/ b
todavía son del tipo Any
. El cheque is
no tiene ningún efecto al lanzarlos. ¡Esto me obliga a forzar el lanzamiento con as!
antes del uso.
¿Hay alguna manera de activar el tipo y vincularlo a un nombre, todo en una declaración de switch
?
Claro, puede usar el case let x as Type
patrón de lanzamiento condicional case let x as Type
:
let x: Any = "123"
switch x {
case let s as String:
print(s) //use s
case let i as Int:
print(i) //use i
case let b as Bool:
print(b) //use b
default:
fatalError()
}