Swift: Test class type in switch statement
You absolutely can use is
in a switch
block. See "Type Casting for Any and AnyObject" in the Swift Programming Language (though it's not limited to Any
of course). They have an extensive example:
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") }}
Putting up the example for "case is - case is Int, is String:" operation, where multiple cases can be used clubbed together to perform the same activity for Similar Object types. Here "," separating the types in case is operating like a OR operator.
switch value{case is Int, is String: if value is Int{ print("Integer::\(value)") }else{ print("String::\(value)") }default: print("\(value)")}
In case you don't have a value, just any object:
swift 4
func test(_ val:Any) { switch val { case is NSString: print("it is NSString") case is String: print("it is a String") case is Int: print("it is int") default: print(val) }}let str: NSString = "some nsstring value"let i:Int=1test(str) // it is NSStringtest(i) // it is int