如何在Swift中创建两个通用T:Codable结构的diff?

时间:2018-02-13 08:44:22

标签: json swift generics codable runtime-type

鉴于:我有两个相同类型的结构,符合Codable Protocol。 结构可以是多级的(嵌套属性,当然也符合Codable)。该类型在实现时尚不清楚,因此我认为它是通用的,符合Codable。

一个对象是" base" (比如,从服务器收到),第二个(实际上是" base"的副本),但在应用程序内修改。

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

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

我已尝试使用Mirror和递归方法,但现在已经设法使其仅适用于第一级 - 在第二级嵌套中我已经丢失了嵌套属性的类型(如果struct或者数组),然后就不能把它投出来......

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

P.S。:泛型类型应具有Optionals的所有属性,因此不应提供任何显式初始值设定项。

1 个答案:

答案 0 :(得分:0)

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

当然,您需要额外支付将Codable个对象转换为数据,然后将该数据解析为对象层次结构的额外费用。