如何在Swift和ObjectMapper中使用继承?

3

我是Swift的新手,我需要在我的iOS(iOS >= 8)项目中将对象结构序列化为JSON字符串。因此,我决定使用ObjectMapper库(我已将其与Cocoapod集成)。

但是我的问题是结构如下。

ObjectA可以具有作为实例变量存储的子对象列表数组。可以存储在实例数组中的对象可以是多种类型,例如ObjectB和ObjectC。因此,在Java中使用GSON,我会创建一个InterfaceD并使我的两个类实现它,并在ObjectA中使用InterfaceD类型存储数组,但我无法弄清楚如何在Swift对象模型中执行此操作,因为结果是空的{} JSON对象。

生成的JSON应该如下所示。

{"children":[
  {"type":"ObjectB", "value1":"foo"},
  {"type":"ObjectC", "value1":"bar", "value2":"baz"}
]}

而我得到

{"children":[
  {},
  {}
]}

请注意,需要从ObjectA和ObjectC序列化的两个条目应具有不同的结构。
我尝试了多种方法,但每次都陷入死胡同。我尝试使用泛型,将Mappable协议用作我的数组类型,我尝试了经典的类继承,但都失败了。
你有任何想法如何实现这一点吗?
请注意,我知道我可以为每个对象添加一个序列化函数,并递归地检索字符串并连接它们。但是,我真的想避免自己实现JSON序列化程序,因为项目中已经成功使用了Alamofire。此外,实现新的序列化程序容易出错,也不是解决问题的干净方式。
非常感谢。
1个回答

0

我从未找到解决方法,但是作为一种变通方法,我只是让我的对象从其所有值中生成一个字典。然后,我递归地将子对象的字典添加为当前字典的值。 这样就为每个对象添加了一个toDict()函数,我通过协议强制执行。 当结果对象仅由一组字典树构成时,ObjectMapper序列化正常工作...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接