Schema 演化
Fory 通过兼容模式支持 Schema 演化。
启用兼容模式
let fory = Fory(xlang: true, trackRef: false, compatible: true)
示例:演化一个结构体
import Fory
@ForyObject
struct PersonV1 {
var name: String = ""
var age: Int32 = 0
var address: String = ""
}
@ForyObject
struct PersonV2 {
var name: String = ""
var age: Int32 = 0
var phone: String? = nil // 新增字段
}
let writer = Fory(xlang: true, compatible: true)
writer.register(PersonV1.self, id: 1)
let reader = Fory(xlang: true, compatible: true)
reader.register(PersonV2.self, id: 1)
let v1 = PersonV1(name: "alice", age: 30, address: "main st")
let bytes = try writer.serialize(v1)
let v2: PersonV2 = try reader.deserialize(bytes)
assert(v2.name == "alice")
assert(v2.age == 30)
assert(v2.phone == nil)
兼容模式下的安全变更
- 新增字段
- 删除旧字段
- 调整字段顺序
不安全的变更
- 随意修改已有字段的类型(例如从
Int32改成String) - 节点之间的注册映射不一致
Schema 一致模式行为
当 compatible=false 时,Fory 会校验 schema 哈希,并在不匹配时快速失败。