自定义 Swift Codable 编码器和解码器

自定义 Swift Codable 编码器和解码器

作者 Mattt

在 Swift 4 中声明了 Codable 协议的类型实现 EncoderDecoder 之后, 都可以同其表示进行编解码操作。

这个功能发布之初, 只有 Foundation 框架中的 JSONEncoder / JSONDecoder / PropertyListEncoder /PropertyListDecoder 有相关的功能实现。然而这些类型的实现细节还和 JSONSerializationPropertyListSerialization 混杂在一起。

我们在 GitHub 上发布的 DIY Codable Encoder / Decoder Kit 让开发者为自定义格式添加编码解码器更方便了。代码模版中包含所需类型和方法的占位符,同时也包含编码和解码 Codable 类型的简单测试。

简单替换掉 Format 的名字,然后重命名文件,你自己的格式也可以方便地实现它们。

编码器结构

public class <#Format#>Encoder {
    public func encode<T>(_ value: T) throws -> Data
                        where T : Encodable
}

class _<#Format#>Encoder: Encoder {
    class SingleValueContainer: SingleValueEncodingContainer
    class UnkeyedContainer: UnkeyedEncodingContainer
    class KeyedContainer<Key>: KeyedEncodingContainerProtocol
            where Key: CodingKey
}

protocol <#Format#>EncodingContainer: class {}
复制代码

解码器结构

public class <#Format#>PackDecoder {
    public func decode<T>(_ type: T.Type,
                          from data: Data) throws -> T
                        where T : Decodable
}

final class _<#Format#>Decoder: Decoder {
    class SingleValueContainer: SingleValueDecodingContainer
    class UnkeyedContainer: UnkeyedDecodingContainer
    class KeyedContainer<Key>: KeyedContainer
            where Key: CodingKey
}

protocol <#Format#>DecodingContainer: class {}
复制代码

Codable 的 MessagePack 编码解码器 中有使用这个模版的样例代码可以参考。

希望大家能够喜欢这个项目。欢迎大家来我们的 Twitter 与大家交流你自己实现的自定义编码器和解码器。

学习了解更多关于 Codable 的知识, 请参阅 使用 Swift Codable 进行高效的数据编解码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值