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

Ios 如何在运行时知道对象的类?,ios,swift,Ios,Swift,我不明白为什么我在某处找不到这个问题,因为我认为这是一个很常见的问题,所以我可能还没有完全清醒。如果是这样的话,我很抱歉 我有我的prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject!)函数,但我无法找到什么类是sender。我不想尝试Foundation框架的每个类,所以有办法在运行时了解它 当我使用调试器时,我只得到(AnyObject!)发送方=(instance_type=Builtin.RawPointer=…,这并没有真正的帮

我不明白为什么我在某处找不到这个问题,因为我认为这是一个很常见的问题,所以我可能还没有完全清醒。如果是这样的话,我很抱歉

我有我的
prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject!)
函数,但我无法找到什么类是
sender
。我不想尝试
Foundation
框架的每个类,所以有办法在运行时了解它


当我使用调试器时,我只得到
(AnyObject!)发送方=(instance_type=Builtin.RawPointer=…
,这并没有真正的帮助。

每个对象都有一个底层的
dynamicType
属性,从理论上讲,当打印到控制台时,该属性应该显示对象的实际类型。但是,Swift还不支持可打印的元类型,因此您将得到
存在元类型
对于实例的
动态类型
和类类型的
元类型
。为了避免这种情况,您可以将
类型
变量强制转换为
任何对象
,当打印到控制台时,将打印目标C元类型

if let object = sender {
    println(object.dynamicType as AnyObject)
}

我发现使用“if-let”来检查它是否是我正在寻找的对象更“快捷”,而不是询问对象的类

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

你为什么需要发送者的类?因为我试图在我的tableview的行上做一个插入式转换,如果我没有弄错,我需要手势开始的位置来获取行的索引。因为我不知道我的发送者是什么对象,我不知道如何获取位置…如果我理解正确,你知道这个类d您只需要强制转换。如果是这种情况,请使用
as
让cell=sender作为UITableViewCell
。不,实际上我不知道是哪个类。我以为它类似于uigestureRecognitor,但事实并非如此。这就是为什么我想知道是否有办法在运行时知道sender是什么类型的类。当我这样做时,我会得到一个错误r:无法从“AnyObject!.Type”向下转换为非@objc协议类型“AnyObject”。嗯,它可能需要隐式展开。我刚做了一次编辑,请尝试一下。它可以工作,但您需要添加一个“?”在sender之后。谢谢。所以在运行时没有办法确切地知道什么类型的类是对象AnyObject?也许我不理解你所说的“知道”是什么意思,因为这不是让你“知道”它是什么类吗?你最终想要的是什么行为。我明白了问题所在。prepareForSegue有一个可选的发送者。很抱歉我同意,这就是我最后建议尼科做的。