Swift元类型
元类型
元类型是指所有类型的类型,包括类、结构体、枚举和协议。
类、结构体或枚举类型的元类型是相应的类型名紧跟.Type
。协议类型的元类型——并不是运行时适配该协议的具体类型——是该协议名字紧跟.Protocol
。比如,类SomeClass
的元类型就是SomeClass.Type
,协议SomeProtocol
的元类型就是SomeProtocal.Protocol
。
你可以使用后缀self
表达式来获取类型。比如,SomeClass.self
返回SomeClass
本身,而不是SomeClass
的一个实例。同样,SomeProtocol.self
返回SomeProtocol
本身,而不是运行时适配SomeProtocol
的某个类型的实例。还可以对类型的实例使用dynamicType
表达式来获取该实例在运行阶段的类型,如下所示:
class SomeBaseClass {
class func printClassName() {
println("SomeBaseClass")
}
}
class SomeSubClass: SomeBaseClass {
override class func printClassName() {
println("SomeSubClass")
}
}
let someInstance: SomeBaseClass = SomeSubClass()
// someInstance is of type SomeBaseClass at compile time, but
// someInstance is of type SomeSubClass at runtime
someInstance.dynamicType.printClassName()
// prints "SomeSubClass