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()
}