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