Skip to main content
Version: dev

Polymorphism and Dynamic Types

Fory Swift supports dynamic serialization for Any, AnyObject, and any Serializer.

Top-level Dynamic APIs

let fory = Fory()

let dynamic: Any = Int32(7)
let data = try fory.serialize(dynamic)
let decoded: Any = try fory.deserialize(data)

Equivalent overloads exist for:

  • AnyObject
  • any Serializer
  • AnyHashable
  • [Any]
  • [String: Any]
  • [Int32: Any]
  • [AnyHashable: Any]

Dynamic Fields in @ForyObject Types

@ForyObject
struct DynamicHolder {
var value: Any = ForyAnyNullValue()
var list: [Any] = []
var byName: [String: Any] = [:]
var byId: [Int32: Any] = [:]
var byDynamicKey: [AnyHashable: Any] = [:]
}

Concrete Type Registration Still Applies

If dynamic values contain user-defined runtime types, register those concrete types.

@ForyObject
struct Address {
var street: String = ""
var zip: Int32 = 0
}

let fory = Fory()
fory.register(Address.self, id: 100)

Null Semantics

  • Any null representation: ForyAnyNullValue
  • AnyObject null representation: NSNull
  • Optional dynamic values map to the corresponding null representation on decode

Current Limitations

  • AnyHashable keys must wrap runtime values that are both Hashable and supported by Fory dynamic serialization