在Swift中动态获取AnyObject的类型

Ris*_*shi 15 swift

我已将参数传递给AnyObject类型的函数,因为任何东西都可以传递给它.有没有办法动态地传递Object的类型?

new*_*cct 30

目前尚不清楚你的问题中的"类型"是什么意思.对于Swift中任何类型的任何值,您可以获得如下的动态运行时类型:

theVariable.dynamicType
Run Code Online (Sandbox Code Playgroud)

你可以用它做什么是另一个问题.

Swift 3版本与@jojodmo的提示:

type(of: theVariable)
Run Code Online (Sandbox Code Playgroud)

  • 在Swift 3中,它被改为`type(of:theVariable)` (9认同)

Rob*_*ier 12

通常这是泛型的用途.拥有一个AnyObject不与ObjC交互的代码很少有充分的理由.如果您正在根据类型执行不同的操作,那么您实际上可能意味着使用重载.

也就是说,有几种方法可以访问该类型.通常,您希望根据类型运行不同的代码,因此您可以使用a switch:

let x:AnyObject = "asdf"
switch x {
case is String: println("I'm a string")
default: println("I'm not a string")
}
Run Code Online (Sandbox Code Playgroud)

要么

let x:AnyObject = "asdf"
switch x {
case let xString as String: println("I'm a string: \(xString)")
default: println("I'm not a string")
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用if:

if let string = x as? String {
  println("I'm a string: \(string)")
}
Run Code Online (Sandbox Code Playgroud)

有关更多讨论,请参阅Swift编程语言中的"为任意和AnyObject类型转换".

但是,除非你使用ObjC代码,否则很少有理由使用AnyAnyObject.泛型和重载是旨在解决Swift中的这些问题的工具.