多态与动态类型
Fory Swift 支持对 Any、AnyObject 和 any Serializer 进行动态序列化。
顶层动态 API
let fory = Fory()
let dynamic: Any = Int32(7)
let data = try fory.serialize(dynamic)
let decoded: Any = try fory.deserialize(data)
还提供了以下等价重载:
AnyObject- 任意序列化器协议类型:
any Serializer AnyHashable[Any][String: Any][Int32: Any]- 动态键值映射:
[AnyHashable: Any]
@ForyObject 类型中的动态字段
@ForyObject
struct DynamicHolder {
var value: Any = ForyAnyNullValue()
var list: [Any] = []
var byName: [String: Any] = [:]
var byId: [Int32: Any] = [:]
var byDynamicKey: [AnyHashable: Any] = [:]
}
具体类型注册仍然生效
如果动态值中包含用户定义的运行时类型,仍需注册这些具体类型。
@ForyObject
struct Address {
var street: String = ""
var zip: Int32 = 0
}
let fory = Fory()
fory.register(Address.self, id: 100)
空值语义
Any的空值表示:ForyAnyNullValueAnyObject的空值表示:NSNull- 可选动态值在解码时会映射到对应的空值表示
当前限制
AnyHashable键必须包装既实现了Hashable、又被 Fory 动态序列化支持的运行时值