3

给定:我有两个相同类型的结构,符合 Codable 协议。结构可以是多级的(嵌套属性,当然也符合 Codable)。该类型在实现时是未知的,所以我认为它是通用的,符合 Codable。

一个对象是“base”(例如,从服务器接收),第二个(实际上是“base”的副本),但在应用程序内部进行了修改。

目的是:发送保存新数据的请求,但仅发送两个结构的“差异”。因此,只有不同的字段应该出现在结果 JSON 中。

为两个结构获取 JSON 字符串并使用它们进行操作的直接方法是可以理解的,但似乎是最后机会的方法......

我已经尝试过使用 Mirror 和递归的方法,但现在已经设法使其仅适用于第一级 - 在第二级嵌套上,我丢失了嵌套属性的类型(如果是结构或数组),并且无法转换那时就...

我想知道是否可以使用自定义编码器以某种方式制作它?

PS:泛型类型的所有属性都应该是可选的,所以不应该提供任何显式的初始化器。

4

1 回答 1

0

而不是您的“最后机会方法” - 匹配 JSON 字符串 - 您可以使用JSONSerialization.jsonObject将 JSON 数据转换为 Foundation 对象并在更高级别的抽象上执行比较(如果这就是您首先在问题中的意思,然后对不起-没关系)。

当然,将Codable对象转换为数据,然后将数据解析为对象层次结构,您会付出额外的代价。

于 2018-02-13T10:55:12.423 回答