Swift - 覆盖默认值 encoding/decoding
Swift - Override default encoding/decoding
CGSize
默认编码为数组。我想将其编码为 [String: Float]
(即 ["width": 10, "height": 20]
)。有没有办法覆盖默认的 encoding/decoding 行为?当然,作为解决方法,我可以定义自己的 Dimension
类型并使用它。我只是想知道。
没有受支持的方法可以完全覆盖您不拥有的给定类型的编码格式;您可以应用一些 hack 来覆盖您自己的模块中的某些类型,但它们很脆弱,不值得使用。
如果您使用的第 3 方 encoder/decoder 组合不是 Foundation.JSONEncoder
/Foundation.JSONDecoder
,它可能会提供类似于 encoding/decoding 支持的策略的覆盖工具基础,但这取决于您使用的工具。
执行此操作的“官方”方法是将 CGSize
包装在您拥有的类型中(如您建议的那样)并在那里实现 init(from:)
/encode(to:)
,或者为所有使用 CGSize
的类型覆盖 init(from:)
/encode(to:)
(但这可能会变得非常乏味)。
CGSize
默认编码为数组。我想将其编码为 [String: Float]
(即 ["width": 10, "height": 20]
)。有没有办法覆盖默认的 encoding/decoding 行为?当然,作为解决方法,我可以定义自己的 Dimension
类型并使用它。我只是想知道。
没有受支持的方法可以完全覆盖您不拥有的给定类型的编码格式;您可以应用一些 hack 来覆盖您自己的模块中的某些类型,但它们很脆弱,不值得使用。
如果您使用的第 3 方 encoder/decoder 组合不是 Foundation.JSONEncoder
/Foundation.JSONDecoder
,它可能会提供类似于 encoding/decoding 支持的策略的覆盖工具基础,但这取决于您使用的工具。
执行此操作的“官方”方法是将 CGSize
包装在您拥有的类型中(如您建议的那样)并在那里实现 init(from:)
/encode(to:)
,或者为所有使用 CGSize
的类型覆盖 init(from:)
/encode(to:)
(但这可能会变得非常乏味)。