【发布时间】:2014-06-05 11:52:10
【问题描述】:
只要 Swift 类从 NSObject 扩展而来,我们就可以将它传递给 Objective-C 运行时并要求它为我们自省。
我们有三个选择:
- 类
- classForCoder
- classForKeyedArchiver
。 .但是类被删除了。 (见图)。为什么是这样?
【问题讨论】:
只要 Swift 类从 NSObject 扩展而来,我们就可以将它传递给 Objective-C 运行时并要求它为我们自省。
我们有三个选择:
。 .但是类被删除了。 (见图)。为什么是这样?
【问题讨论】:
那是因为class 是 Swift 中的关键字,因此任何有效的方法都不能命名为class。同理,您不能创建名为for、while 或其他关键字的方法。
我无法用我的方法重现删除,但是,在 obj-c 中命名方法 var(或其他关键字)使得无法从 Swift 调用。
编辑
我错了。仍然可以使用 Swift 调用 class
var clazz: AnyClass? = self.`class`()
但是,编译器会说:
“类”不可用:改用“动态类型”
所以 Edwin Vermeers 的答案是正确的。
【讨论】:
class、for、while 或其他关键字的方法:func `func`() -> Void { ... }
正如您在文档中看到的,它仅在 Objective C 中可用,而在 swift 中不可用。 见:https://developer.apple.com/documentation/objectivec/nsobject/1571950-class
我认为这是因为 AnyObject 为您提供了足够的信息(比 NSObject 更多)
例如,您可以在 swift 中执行 NSStringFromClass(BaseObject) 而不是在 Objective C 中执行的 NSStringFromClass([BaseObject class])
【讨论】: