如何在运行时知道对象的类?

时间:2015-03-08 02:36:20

标签: ios swift

我不明白为什么我在某个地方找不到这个问题,因为我认为这是一个很常见的问题,所以也许我不是很清醒。对不起,如果是这样的话。

我有prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)函数,我找不到哪个类sender。我不想尝试Foundation框架的每个类,所以有没有办法在运行时知道它。

当我使用调试器时,我只得到(AnyObject!) sender = (instance_type = Builtin.RawPointer = ...,这实际上并没有帮助。

2 个答案:

答案 0 :(得分:2)

我没有向对象询问其类,而是发现使用“if let”检查它是否是我正在寻找的更“Swifty”。

func inputUnknown(sender : AnyObject) {
   if let tableView = sander as? UITableView {
      // now you have an object with a defined class
   }
   else {
      // check for other classes or proceed with a default action
   }
}

答案 1 :(得分:0)

每个对象都有一个基础dynamicType属性,理论上,它应该在打印到控制台时显示对象的实际类型。但是,Swift还没有支持可打印的元类型,因此您可以获得ExistentialMetatype dynamicTypeMetaType的类{&#39}} ; s类型。为了解决这个问题,您可以将Type变量转换为AnyObject,当打印到控制台时,它将打印出Objective C元类型。

if let object = sender {
    println(object.dynamicType as AnyObject)
}
相关问题