增强型反射 (EnhancedMirror)

一个实验性的 Mirror 替代方案,它利用 Swift 宏来实现静态反射。

特性

快速开始

注意: Swift 5.9 仍处于预览阶段,尚未稳定。

要在您的项目中使用 EnhancedMirror,请将此仓库添加到 Package.swift 清单文件中

// swift-tools-version:5.9
import PackageDescription

let package = Package(
  name: "MyPackage",
  dependencies: [
    .package(url: "https://github.com/unixzii/EnhancedMirror.git", from: "0.1.0"),
  ],
  targets: [
    .target(name: "MyApp", dependencies: [
      .product(name: "EnhancedMirror", package: "EnhancedMirror"),
    ]),
  ]
)

添加注解

要使类型在运行时可检查,您可以将 @RuntimeInspectable 宏放在您的类型声明处

@RuntimeInspectable
struct Product {
    let modelName: String
    var price: Int

    // ...
}

使用反射 API

一个可检查的类型遵循 RuntimeInspectable 协议,您可以使用该协议公开的 API

let product = Product(...)

let priceField = product.field(named: "price")!

// Read the field value:
print(priceField.value)

// Write the field value:
priceField.write(999)

请参阅 RuntimeInspectable 以获取完整的 API。

注意事项

字段访问器的生命周期

字段访问器不保留值类型值的副本。您不得使其超出被检查值的生命周期,否则可能会发生内存损坏。对于引用类型值,没有此类限制,因为被检查的值会被强引用持有。

项目完整性

该项目在当前阶段尚未完成,但重要的构建块(访问值)已完成。一些高级 API 需要被设计以提供更符合人体工程学的开发者体验,例如递归(反)序列化、字段注解等。这些功能可能会推迟到 Swift 5.9 稳定版本发布。

虽然该项目处于实验阶段,您仍然可以将其用于任何非生产用途。

许可证

根据 MIT 许可证获得许可,有关更多信息,请参阅 LICENSE