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

时间:2016-07-04 15:30:22

标签: ios swift objectmapper

我是Swift的新手,我必须在我的iOS(iOS> = 8)项目中将对象结构序列化为JSON字符串。 所以我决定使用ObjectMapper库(我将它与Cocoapod集成)。

但我的问题是结构如下。

ObjectA可以将子对象列表作为存储在实例变量中的数组。 可以存储在实例数组中的对象可以是多种类型,比如ObjectB和ObjectC。因此,在使用GSON的Java中,我会创建一个InterfaceD,并使我的两个类都实现它并使ObjectA中的数组存储InterfaceD类型,但是我无法通过Swift对象模型来解决这个问题。空{}个JSON对象。

生成的JSON应如下所示。

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

我得到了

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

请注意,必须从objectA和ObjectC序列化的两个条目应具有不同的结构。

我尝试过多次,但每次都陷入了死胡同。 我尝试使用泛型,尝试使用Mappable协议作为我的数组类型,我尝试了经典类继承但任何一个失败。

你知道我怎么能做到这一点吗?

请注意,我知道我可以为每个对象添加一个序列化函数,并以递归方式检索字符串并将它们连接起来。但我真的想避免自己实现JSON序列化程序,因为我已经成功使用了JSON序列化程序,因为Alamofire已经在项目中使用了)。另外,实现新的序列化程序也容易出错,而不是解决IMO问题的干净方法。

非常感谢。

1 个答案:

答案 0 :(得分:0)

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