什么是Swift中的ExistentialMetatype

Evo*_*ate 3 swift

这让我感到很奇怪.在Swift中尝试以下方法:

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        println(self.superclass) //Outputs "(ExistentialMetatype)"
    }
Run Code Online (Sandbox Code Playgroud)

这使控制台上的输出为ExistentialMetatype

深入研究Swift的NSObject框架,它将其声明superclass为类型的只读计算属性AnyClass

    var superclass: AnyClass! { get }
Run Code Online (Sandbox Code Playgroud)

但是没有提到这个词ExistentialMetatype.我不知道为什么,但它提醒Objective-C的运行时(可能是它中的Metatype一词).有人知道吗?

new*_*cct 7

目前,类型(的实例元类型)获得印像无用的东西(Metatype)(ExistentialMetatype).AnyClassAnyObject.Type,元类型.因此,如果您尝试打印,AnyClass您将得到这个无益的描述.

但是,Objective-C中的类是具有良好描述的对象.Swift允许将类类型转换为对象,因此可以以Objective-C方式使用它们.如果将其强制转换为AnyObject第一个,您将看到该类的名称:

println(self.superclass as AnyObject!)
Run Code Online (Sandbox Code Playgroud)