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