class - for - Swift: Tipo de clase de prueba en declaración de cambio
switch swift example (3)
En Swift puedes verificar el tipo de clase de un objeto usando ''is''. ¿Cómo puedo incorporar esto en un bloque ''interruptor''?
Creo que no es posible, así que me pregunto cuál es la mejor manera de evitar esto.
TIA, Peter.
En caso de que no tenga un valor, solo cualquier clase:
func testIsString(aClass: AnyClass) {
switch aClass {
case is NSString.Type:
print(true)
default:
print(false)
}
}
testIsString(NSString.self) //->true
let value: NSString = "some string value"
testIsString(value.dynamicType) //->true
Poniendo el ejemplo para "case is - case is Int, is String: " operación, donde múltiples casos pueden ser utilizados juntos para realizar la misma actividad para tipos de objetos similares. Aquí "," separando los tipos en caso de que funcione como un operador OR .
switch value{
case is Int, is String:
if value is Int{
print("Integer::/(value)")
}else{
print("String::/(value)")
}
default:
print("/(value)")
}
Lo que puedes usar is
absolutamente en un bloque de switch
. Consulte "Escribir Casting para Any y AnyObject" en el Lenguaje de programación Swift (aunque no está limitado a Any
por supuesto). Ellos tienen un extenso ejemplo:
for thing in things {
switch thing {
case 0 as Int:
println("zero as an Int")
case 0 as Double:
println("zero as a Double")
case let someInt as Int:
println("an integer value of /(someInt)")
case let someDouble as Double where someDouble > 0:
println("a positive double value of /(someDouble)")
// here it comes:
case is Double:
println("some other double value that I don''t want to print")
case let someString as String:
println("a string value of /"/(someString)/"")
case let (x, y) as (Double, Double):
println("an (x, y) point at /(x), /(y)")
case let movie as Movie:
println("a movie called ''/(movie.name)'', dir. /(movie.director)")
default:
println("something else")
}
}