只要Swift类从NSObject扩展,我们就可以将它传递给Objective-C运行时并让它为我们内省。
我们有三个选择:
。 。但是课程被打破了。 (见图)。为什么是这样?
答案 0 :(得分:8)
这是因为class
是Swift中的关键字,因此任何有效的方法都不能命名为class
。以同样的方式,您无法创建名为for
,while
或其他关键字的方法。
我无法使用我的方法重现删除操作,但是,在obj-c中命名方法var
(或其他关键字)使得无法从Swift调用它。
修改
我错了。仍然可以使用
从Swift调用class
var clazz: AnyClass? = self.`class`()
然而,编译器说:
'Class'不可用:使用'dynamicType'代替
所以Edwin Vermeers的回答是正确的。
答案 1 :(得分:7)
正如您在文档中看到的那样,它只能在Objective C中使用,而不能在swift中使用。 请参阅:https://developer.apple.com/documentation/objectivec/nsobject/1571950-class
我认为这是因为AnyObject为您提供了足够的信息(超过NSObject)
例如,您可以在swift中执行NSStringFromClass(BaseObject)
而不是在Objective C中执行的NSStringFromClass([BaseObject class])