0

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

4

1 回答 1

1

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

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

执行此操作的“官方”方法是包装CGSize您拥有的类型(如您所建议的那样)并在那里实现init(from:)/ encode(to:),或者为所有使用的类型覆盖init(from:)/ (但这可能会变得非常乏味)。encode(to:)CGSize

于 2020-10-18T21:31:03.620 回答