2016-07-04 64 views
2

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

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

ObjectA可以将子对象的列表作为存储在实例变量中的数组。 可以存储在实例数组中的对象可以是多种类型,比如说ObjectB和ObjectC。因此,在使用GSON的Java中,我将创建一个InterfaceD,并让两个类都实现它,并在ObjectA存储中创建InterfaceD类型的数组,但我无法确定如何使用Swift对象模型执行此操作,因为它导致空{} JSON对象。

生成的JSON应该看起来像这样。

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

,我得到

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

会注意到有两个条目从对象A和ObjectC被序列化应该有不同的结构。

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

你有什么想法我可以做到这一点?

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

非常感谢。

回答

0

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