元类型就是类型的类型。 比如我们说 5 是 Int 类型,此时 5 是 Int 类型的一个值。但是如果我问 Int 类型占用多少内存空间,这个时候与具体某个值无关,而和类型的信息相关。如果要写一个函数,返回一个类型的实例内存空间大小。那么这个时候的参数是一个类型数据,这个类型数据可以是直接说明的比如是 Int 类型,也可以从一个值身上取,比如 5 这个值的类型。这里的类型数据,就是一个类型的类型,术语表述为元类型:metaType。
.Type 与 .self
Swift 中的元类型用 .Type 表示。比如 Int.Type 就是 Int 的元类型。 类型与值有着不同的形式,就像 Int 与 5 的关系。元类型也是类似,.Type 是类型,类型的 .self 是元类型的值。
eg:
let str:String = "字符串"
print(str)
print(str.self)
print(String.Type.self)
print(type(of: str))
print(String.self)
let stringMetatype: Int.Type = Int.self
print(stringMetatype)
打印结果:
字符串
字符串
String.Type
String
String
Int
ps:就像我们平时定义一个常量let age:Int = 5
,那我们定义一个int的元类型就是let intMetatype: Int.Type = Int.self
,我们知道.self
代表本身,那么Int.Type.self
就是Int.Type
。
再比如一个函数:
func sum(a:Int, b:Int) -> Int{
return a + b
}
我们知道a参数是Int类型的参数,如果我们需要传入的参数是一个int类型本身呢,那我们的函数的参数a就要是元类型来接收了
func sum(a:Int.Type, b:Int) -> String{
return "a:是一个int的元类型参数,b是一个int类型参数"
}
那么在使用时,a我们需要传入一个int的元类型使用
let sumEX = sum(a: Int.self, b: 78)
网友评论