自己在Swift中的struct类型之后

J.D*_*Doe 4 reflection metaclass objective-c ios swift

我对金属示例中的一行代码感到困惑,其中内存指针绑定到一个类型.

uniforms = UnsafeMutableRawPointer(uniformBuffer.contents()).bindMemory(to: Uniforms.self, capacity: 1)
Run Code Online (Sandbox Code Playgroud)

我的困惑是.selfUniforms类型.Uniforms是一个在Objective-C文件中定义的结构,代码不会.self在调用中运行.为什么这有必要?

Pau*_*tos 6

.self返回元类型实例为相应的类型.可以将其视为类型安全类型标识符(例如,比使用字符串更安全).然后,您可以安全地调用此类元类型实例上的可用初始值设定项,静态方法和静态属性.

例如,您也可以将其存储在变量中:

let metatype: Uniforms.Type = Uniforms.self
Run Code Online (Sandbox Code Playgroud)

并且Uniforms.Type实际的元类型(即类型的类型).

元类型速成课程.一个非常快速的例子来了解这个元组件实际上是如何有用的:

class Super {
    let id: Int
    required init(id: Int) { self.id = id }
}

class SubA: Super { ... }
class SubB: Super { ... }

let subclass: Super.Type = SubA.self
Run Code Online (Sandbox Code Playgroud)

然后,稍后,使用subclass创建实例而不对实际的子类类型名称进行硬编码:

let obj = subclass.init(id: 123) // new SubA instance.
Run Code Online (Sandbox Code Playgroud)