匹配Swift中对象的数据类型

Rac*_*hit 5 types ios swift

如何匹配Swift中对象的数据类型?

喜欢:

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")
    }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,开关盒运行默认情况

Bry*_*hen 11

改变var xyz : AnyObjectvar xyz : Any添加它会匹配这种情况

case let x as Int:
Run Code Online (Sandbox Code Playgroud)

来自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
Run Code Online (Sandbox Code Playgroud)

来自Swift编程语言

您可以在switch语句的情况下使用is和as运算符来发现常量或变量的特定类型,该常量或变量只有Any或AnyObject类型.下面的示例遍历items数组中的项目,并使用switch语句查询每个项目的类型.有几个switch语句将它们的匹配值绑定到指定类型的常量,以使其值可以打印:

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
Run Code Online (Sandbox Code Playgroud)

注意:

var xyz : AnyObject = 1
Run Code Online (Sandbox Code Playgroud)

会给你,NSNumber因为Int它不是对象所以它自动将其转换NSNumber为对象