元類型是指所有類型的類型,包括類、結(jié)構(gòu)體、枚舉和協(xié)議。
類、結(jié)構(gòu)體或枚舉類型的元類型是相應的類型名緊跟.Type
。協(xié)議類型的元類型——并不是運行時適配該協(xié)議的具體類型——是該協(xié)議名字緊跟.Protocol
。比如,類SomeClass
的元類型就是SomeClass.Type
,協(xié)議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