字段配置
本页介绍 Swift 中基于宏的字段配置能力。
可用的宏特性
- 在 struct / class / enum 上使用
@ForyObject - 在数值字段上使用
@ForyField(encoding: ...)
@ForyField(encoding:) 字段编码配置
使用 @ForyField 可以覆盖整数编码策略。
@ForyObject
struct Metrics: Equatable {
@ForyField(encoding: .fixed)
var u32Fixed: UInt32 = 0
@ForyField(encoding: .tagged)
var u64Tagged: UInt64 = 0
}
支持的组合
| Swift 类型 | 支持的编码值 | 默认编码 |
|---|---|---|
Int32 | .varint, .fixed | .varint |
UInt32 | .varint, .fixed | .varint |
Int64 | .varint, .fixed, .tagged | .varint |
UInt64 | .varint, .fixed, .tagged | .varint |
Int | .varint, .fixed, .tagged | .varint |
UInt | .varint, .fixed, .tagged | .varint |
编译期校验会拒绝不支持的组合(例如 Int32 配合 .tagged)。
@ForyObject 要求
struct 和 class 字段
- 存储属性必须显式声明类型
- 计算属性会被忽略
- 静态 / 类属性会被忽略
class 额外要求
标注 @ForyObject 的类必须提供 required init() 以支持默认构造。
@ForyObject
final class Node {
var value: Int32 = 0
var next: Node? = nil
required init() {}
}
宏类型中的动态 Any 字段
@ForyObject 支持动态字段以及嵌套容器:
- 动态值类型:
Any、AnyObject、any Serializer AnyHashable[Any][String: Any][Int32: Any]- 动态键值映射:
[AnyHashable: Any]
当前限制:
- 仅当
K为String、Int32或AnyHashable时,才支持Dictionary<K, Any>