我对Swift语言中的“元类型”概念感到非常困惑。
假设我有
class SomeClass {
class func callClassMethod() {
print("I'm a class method. I belong to my type.")
}
func callInstanceMethod() {
print("I'm an instance method. I belong to my type instance.")
}
}
根据定义:
元类型类型是指任何类型的类型,包括类类型, 结构类型,枚举类型和协议类型。
SomeClass已经是一个称为SomeClass的类型,那么SomeClass的类型到底是什么?
我可以创建SomeClass.Type变量:
let var1 : SomeClass.Type = SomeClass.self
var1.doIt();//"I'm a class method. I belong to my type."
但是我也可以这样调用static / class函数:
SomeClass.doIt();//"I'm a class method. I belong to my type."
是否相同?
答案 0 :(得分:0)
它们是相同的,因为编译器保证类名是唯一的(Swift是按模块隔开的名称),因此只有SomeClass.Type
属于一类,即SomeClass
。当您只想将某物的类型传递给函数但又不想传递实例时,元类型通常很有用。 Codable
例如:
let decoded = try decoder.decode(SomeType.self, from: data)
如果您无法在此处传递元类型,则编译器仍可以根据左侧的注释来推断返回类型,但可读性较低:
let decoded: Sometype = try decoder.decode(data)
某些库确实使用类型推断样式,尽管Apple偏爱使用meta类型作为其更清晰的含义,即赋值右侧是自己的,而不依赖于左侧的类型推断。作业。