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