What have I done?

关于这个话题,我仔细阅读了苹果公司的documentation份报告.

Details

SWIFT标准库定义了数据编码和解码的标准化方法.

我意识到我遇到的所有示例都是从具有键JSONPLISTXML(自定义)的外部数据表示中解码数据.

我遇到了一个外部数据表示没有键的用例. 例如,当从蓝牙设备读取数据时.您将收到格式化为ArrayUInt8的数据.

在研究Apple的文档和定制的Decoder个实现时,我意识到所有外部数据表示都有键.

我想知道苹果的解决方案是否留有足够的回旋余地来处理不使用键的外部数据表示,即UInt8Array.

推荐答案

如果Decoder没有可用于解码的键控数据,则记录Decoder.container(keyedBy:)抛出错误(DecodingError.typeMismatch).在这种情况下,如果Decoder表示的格式根本不能支持键控数据,那么当请求键控数据时,它总是会抛出错误.

然而,这样的Decoder对于任意类型并不是特别有用,因为大多数类型默认从键控数据进行编码和解码;这是使用编译器合成的Encodable/Decodable一致性时的默认行为.

如果您使用这样的Decoder来只解码您控制的类型(并且知道只请求无键容器),那么完全避免Codable个API并编写您自己的编码和解码工具可能会更简单、更容易.

根据您对格式的描述,听起来这种格式不太可能适合Codable,反之亦然.(这也没问题!Codable并不是要完美地适应all种数据格式.)

Swift相关问答推荐

SwiftUI轨迹绘制怪异

SWIFT:使字典数组值可变

Swift通过设置变量B自动设置变量A的值

对实例方法appendInterpolation的调用没有完全匹配

更改 SwiftUI 中按钮矩阵的填充 colored颜色

需要将 json 映射到 Swift 中的模型

Pod lib lint 命令找不到 watchos 模拟器

SwiftUI 动画的范围

SwiftUI 视图的默认成员初始化器 VS 自定义初始化器

如何让不同的组件拥有不同的动画?

如何在不阻塞 UI 更新的情况下使用 Swift Concurrency 在后台执行 CPU 密集型任务?

如何使被拖动的对象成为前景(foreground)对象

在 SwiftUI 中,如何在 UIView 内或作为 UIView 使用 UIHostingController?

不支持用作符合协议 AnyObject 的具体类型

使 struct 可散列?

哪些版本的 Xcode 支持哪些版本的 Swift?

playground 导入:没有这样的模块Foo

在 Swift 中子类化 NSObject - 初始化器的最佳实践

为什么枚举具有计算(computed)属性但在 Swift 中没有存储属性?

ISO8601DateFormatter 不解析 ISO 日期字符串