跳到主要内容
版本:0.16

多态与动态类型

Fory Swift 支持对 AnyAnyObjectany 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 的空值表示:ForyAnyNullValue
  • AnyObject 的空值表示:NSNull
  • 可选动态值在解码时会映射到对应的空值表示

当前限制

  • AnyHashable 键必须包装既实现了 Hashable、又被 Fory 动态序列化支持的运行时值