Swift-覆盖默认的编码/解码

问题描述

CGSize默认编码为数组。我想将其编码为[String: Float](即["width": 10,"height": 20])。有没有办法覆盖默认的编码/解码行为?当然,作为一种解决方法,我可以定义自己的Dimension类型并使用它。我只是想知道。

解决方法

对于您不拥有的给定类型,没有一种支持的方法可以完全覆盖编码格式。您可以使用一些技巧来覆盖自己模块中的某些类型,但它们很脆弱,不值得使用。

如果您使用的不是Foundation.JSONEncoder / Foundation.JSONDecoder的第三方编码器/解码器组合,它可能会提供类似于Foundation支持的编码/解码策略的替代功能,但是这取决于在您使用的工具上。

执行此操作的“官方”方法是将CGSize包装为您拥有的类型(根据您的建议),然后在其中实现init(from:) / encode(to:),或者覆盖{ {1}} / init(from:)用于所有使用encode(to:)的类型(但这会变得非常乏味)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...