Ios swift:等效的objective-c运行时类
以下目标C代码的等效swift代码是什么。我找不到具有运行时概念的swift主题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中,类对
#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,它将被桥接为expectAnyClass
,因此您必须传递类型。您可以使用.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)