Swift: Test class type in switch statement Swift: Test class type in switch statement swift swift

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

Demo Link


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