Ios swift:等效的objective-c运行时类

Ios swift:等效的objective-c运行时类,ios,swift,objective-c-runtime,Ios,Swift,Objective C Runtime,以下目标C代码的等效swift代码是什么。我找不到具有运行时概念的swift主题 #import <objc/runtime.h> Class class = [self class]; 注意:找到了,但没有帮助。首先,如果不知道在Objective-C中使用该类对象的目的,很难将该代码转换为Swift var klass: AnyClass = object_getClass(self) NSStringFromClass(klass) 在Objective-C中,类对

以下目标C代码的等效swift代码是什么。我找不到具有运行时概念的swift主题

#import <objc/runtime.h>    
Class class = [self class];

注意:找到了,但没有帮助。

首先,如果不知道在Objective-C中使用该类对象的目的,很难将该代码转换为Swift

var klass: AnyClass = object_getClass(self)
NSStringFromClass(klass)
在Objective-C中,类对象是对象,类型
class
可以保存指向任何类对象的指针。但是,当Objective-C API桥接到Swift时,类型
Class
将转换为
AnyClass在Swift中,其中
AnyClass
定义为
AnyObject.Type
。Swift中的类型不是对象,因此不直接等同于Objective-C中的类对象。但是,如果您打算使用Swift中的Objective-C API,它将被桥接为expect
AnyClass
,因此您必须传递类型。您可以使用
.dynamicType
获取任何表达式的类型;例如:

self.dynamicType
(如果您真的希望以与Objective-C中相同的方式获取类对象作为Swift对象,而不是作为Swift类型,那么也有一些方法可以做到这一点。)

然而,您对问题的描述揭示了另一个问题。如果您只想获取对象的类型,并且
self
是一个对象,那么
var-klass:AnyClass=object\u getClass(self)
应该可以工作,因为
object\u getClass()
接受
AnyObject
并返回
AnyClass
。它不起作用的唯一解释是
self
不是对象。您的错误消息显示,
self
确实是一个类型,而不是一个对象

self
是一种类型,如果此代码在类方法中运行。您应该为代码提供上下文(显然,您没有将
Class=[self Class];
放在文件的顶层),因为脱离上下文很容易被误解。在Objective-C Cocoa中,有两个非常不同的方法名为
class
:一个是实例方法
-class
,它返回对象的类;另一个是类方法
+class
,它只返回调用它的(类)对象。由于您的代码位于类方法中,因此在Objective-C中,
self
指向一个类对象,
[self class]
运行class方法
+class
,该方法只返回调用它的对象。换句话说,
[self class]
self
完全相同。你应该一直写
self
,但没有意识到这一点

所以答案是,目标C应该是

Class class = self;
同样,Swift也应该是

var klass: AnyClass = self

在Swift 3中,
self.dynamicType
(通常是
dynamicType
)已被删除

您现在可以使用:

type(of: self)

请检查此答案:class是Swift中的保留关键字。大多数功能都可以从对象本身使用。AnyObject比NSObject具有更多的功能。例如,现在可以从对象访问version属性,而不是先获取类,然后获取版本。那你想用它做什么?它不是复制品。读者必须仔细阅读问题。这是返校班吗?或者NSString?Swift中没有类类型,只有AnyObject,所以您只能获取类名(typealias AnyClass=AnyObject.type)K我接受此语句
Swift中没有类类型
,但上面的答案不正确,即使此语句corect.object\u getClass(self)您尝试过吗?由于“UIViewController.type”不符合协议“AnyObject”,我收到了错误。
type(of: self)