跳到主要内容
版本:0.16

基础序列化

本页介绍 Swift 中的对象图序列化和核心 API 用法。

对象图序列化

在 struct / class / enum 上使用 @ForyObject,注册类型后即可进行序列化和反序列化。

import Foundation
import Fory

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

@ForyObject
struct Person: Equatable {
var id: Int64 = 0
var name: String = ""
var nickname: String? = nil
var tags: Set<String> = []
var scores: [Int32] = []
var addresses: [Address] = []
var metadata: [Int8: Int32?] = [:]
}

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

let person = Person(
id: 42,
name: "Alice",
nickname: nil,
tags: ["swift", "xlang"],
scores: [10, 20, 30],
addresses: [Address(street: "Main", zip: 94107)],
metadata: [1: 100, 2: nil]
)

let data = try fory.serialize(person)
let decoded: Person = try fory.deserialize(data)
assert(decoded == person)

使用现有缓冲区

可以将序列化字节追加到现有 Data 中,并从 ByteBuffer 反序列化。

var output = Data()
try fory.serialize(person, to: &output)

let inputBuffer = ByteBuffer(data: output)
let fromBuffer: Person = try fory.deserialize(from: inputBuffer)
assert(fromBuffer == person)

内置支持的类型

基础值与标量

  • Bool
  • 有符号整数:Int8Int16Int32Int64Int
  • 无符号整数:UInt8UInt16UInt32UInt64UInt
  • Float, Double
  • String
  • Data

日期与时间

  • Date
  • ForyDate
  • Fory 时间戳:ForyTimestamp

集合

  • T: Serializer 时支持 [T]
  • T: Serializer & Hashable 时支持 Set<T>
  • K: Serializer & HashableV: Serializer 时支持 [K: V]
  • 可选类型变体(T?

动态类型

  • Any
  • AnyObject
  • 任意序列化器协议类型:any Serializer
  • AnyHashable
  • [Any]
  • [String: Any]
  • [Int32: Any]
  • 动态键值映射:[AnyHashable: Any]