Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Match the data type of a object in Swift

Tags:

types

ios

swift

How to match the data type of a object in Swift?

Like:

var xyz : Any
    xyz = 1;
    switch xyz
 {
    case let x where xyz as?AnyObject[]:
        println("\(x) is AnyObject Type")
    case let x where xyz as?String[]:
        println("\(x) is String Type")
    case let x where xyz as?Int[]:
        println("\(x) is Int Type")
    case let x where xyz as?Double[]:
        println("\(x) is Double Type")
    case let x where xyz as?Float[]:
        println("\(x) is Float Type")
    default:println("None")
    }

In this case switch case run default case

like image 309
Rachit Avatar asked Jun 27 '14 04:06

Rachit


People also ask

How can I check if object is of given type Swift?

Checking TypeUse the type check operator ( is ) to check whether an instance is of a certain subclass type. The type check operator returns true if the instance is of that subclass type and false if it's not.

What is object type in Swift?

As I mentioned in Chapter 1, Swift object types come in three flavors: enum, struct, and class.

How do I know the type of a variable in Swift?

To get type of a variable in Swift, call type(of:) function, and pass the variable as argument for of: parameter.


2 Answers

change var xyz : AnyObject to var xyz : Any and add it will match to this case

case let x as Int:

from REPL

  1> var a : Any = 1
a: Int = <read memory from 0x7fec8ad8bed0 failed (0 of 8 bytes read)>
  2> switch a { case let x as Int: println("int"); default: println("default"); }
int

from The Swift Programming Language

You can use the is and as operators in a switch statement’s cases to discover the specific type of a constant or variable that is known only to be of type Any or AnyObject. The example below iterates over the items in the things array and queries the type of each item with a switch statement. Several of the switch statement’s cases bind their matched value to a constant of the specified type to enable its value to be printed:

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

// zero as an Int
// zero as a Double
// an integer value of 42
// a positive double value of 3.14159
// a string value of "hello"
// an (x, y) point at 3.0, 5.0
// a movie called 'Ghostbusters', dir. Ivan Reitman

Note:

var xyz : AnyObject = 1

will give you NSNumber because Int is not object so it auto convert it to NSNumber which is object

like image 97
Bryan Chen Avatar answered Sep 17 '22 21:09

Bryan Chen


Putting up an interesting usage of "case is" i.e., "case is Int, is String", "," behavior is like OR operator.

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

Similar Post with demo link

like image 40
Abhijeet Avatar answered Sep 20 '22 21:09

Abhijeet