.self 在 Swift 中的结构类型之后

.self after struct type in Swift

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

uniforms = UnsafeMutableRawPointer(uniformBuffer.contents()).bindMemory(to: Uniforms.self, capacity: 1)

我的困惑是Uniforms类型后面的.selfUniforms 是在 Objective-C 文件中定义的结构,如果调用中没有 .self,代码就不会 运行。为什么有必要?

.selfreturns元类型实例对应类型。将其视为类型安全的类型标识符(例如,比使用字符串更安全)。然后,您可以在此类元类型实例上安全地调用可用的初始化程序、静态方法、静态属性。

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

let metatype: Uniforms.Type = Uniforms.self

Uniforms.Typeactual 元类型(即类型的类型)。

元类型速成班。一个非常简单的示例,可以让您了解这些元数据的实际用途:

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

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

let subclass: Super.Type = SubA.self

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

let obj = subclass.init(id: 123) // new SubA instance.

在 Swift 中,.self 可用于类型以提取其元类型或用于类型的实例。例如,使用 .self 获取元类型并将其传递给 API:

self.tableView.registerClass(
    UITableViewCell.self, forCellReuseIdentifier: "myUIViewCell")