Swift:为什么类方法被淘汰了

时间:2014-06-05 11:52:10

标签: swift objective-c-runtime

只要Swift类从NSObject扩展,我们就可以将它传递给Objective-C运行时并让它为我们内省。

我们有三个选择:

  • classForCoder
  • classForKeyedArchiver

。 。但是课程被打破了。 (见图)。为什么是这样?

enter image description here

2 个答案:

答案 0 :(得分:8)

这是因为class是Swift中的关键字,因此任何有效的方法都不能命名为class。以同样的方式,您无法创建名为forwhile或其他关键字的方法。

我无法使用我的方法重现删除操作,但是,在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])