Swift:在switch语句中testing类的types

在Swift中,你可以使用'is'来检查一个对象的类的types。 我怎样才能把它合并到一个“开关”块?

我认为这是不可能的,所以我想知道什么是最好的方法。

TIA,Peter。

你绝对可以使用在一个switch块。 请参阅Swift编程语言中的“为Any和AnyObjecttypes转换”(尽pipe当然不限于Any )。 他们有一个广泛的例子:

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

把“案例是 – 情况的例子是Int,是String: ”操作,可以使用多个案例聚合在一起来为类似对象types执行相同的活动。 在这里“,”分开types的情况下,像一个运算符。

 switch value{ case is Int, is String: if value is Int{ print("Integer::\(value)") }else{ print("String::\(value)") } default: print("\(value)") } 

演示链接

如果你没有价值,只有任何一类:

 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