这让我感到很奇怪。在Swift中尝试以下方法:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
println(self.superclass) //Outputs "(ExistentialMetatype)"
}
这使控制台上的输出为 ExistentialMetatype
深入了解Swift的 NSObject 框架,它将此superclass
声明为AnyClass
类型的只读计算属性
var superclass: AnyClass! { get }
但是没有提到这个词ExistentialMetatype
。我不知道为什么,但它提醒Objective-C的运行时(可能是它中的Metatype一词)。有人知道吗?
答案 0 :(得分:7)
目前, types (元类型的实例)被打印为无用的内容,例如(Metatype)
或(ExistentialMetatype)
。 AnyClass
是AnyObject.Type
,是元类型。因此,如果您尝试打印AnyClass
,则会得到无用的描述。
然而,Objective-C中的类是具有良好描述的对象。 Swift允许将类类型转换为对象,因此可以以Objective-C方式使用它们。如果先将其转换为AnyObject
,您将看到该类的名称:
println(self.superclass as AnyObject!)
答案 1 :(得分:1)
如果我没记错的话,发生的事情是AnyClass是一种特制的协议类型 - 每种"引用类型的协议类型" (类)自动符合
协议类型有时被称为"存在类型"由友好的编译工程师(例如http://www.haskell.org/haskellwiki/Existential_type)
在这种情况下,您要查看代表这种存在类型的类型对象,"元类型"正如你所说。因此' ExistentialMetatype'!