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