元類型是指所有類型的類型,包括類、結(jié)構(gòu)體、枚舉和協(xié)議。
類、結(jié)構(gòu)體或枚舉類型的元類型是相應(yīng)的類型名緊跟.Type。協(xié)議類型的元類型——并不是運(yùn)行時(shí)適配該協(xié)議的具體類型——是該協(xié)議名字緊跟.Protocol。比如,類SomeClass的元類型就是SomeClass.Type,協(xié)議SomeProtocol的元類型就是SomeProtocal.Protocol。
你可以使用后綴self表達(dá)式來(lái)獲取類型。比如,SomeClass.self返回SomeClass本身,而不是SomeClass的一個(gè)實(shí)例。同樣,SomeProtocol.self返回SomeProtocol本身,而不是運(yùn)行時(shí)適配SomeProtocol的某個(gè)類型的實(shí)例。還可以對(duì)類型的實(shí)例使用dynamicType表達(dá)式來(lái)獲取該實(shí)例在運(yùn)行階段的類型,如下所示:
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