Swift中的元类型到底是什么?

时间:2019-11-21 19:39:47

标签: swift

我对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."

是否相同?

1 个答案:

答案 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类型作为其更清晰的含义,即赋值右侧是自己的,而不依赖于左侧的类型推断。作业。