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 hash,并在不匹配时快速失败。