switch for example class swift switch-statement

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

Enlace demo


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