一个实验性的 Mirror
替代方案,它利用 Swift 宏来实现静态反射。
struct
和 class
的字段。注意: 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
// ...
}
一个可检查的类型遵循 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。