Realm + Mantle:在集成两个框架时如何避免多重继承重复?

时间:2016-05-26 12:37:15

标签: ios objective-c realm github-mantle realm-cocoa

我有一个简单的场景,我想用Mantle从Json解析一个User模型并将其持久化到一个领域数据库:

为了使用Mantle库,模型接口必须扩展 MTLModel 类,如下所示:

@interface User: MTLModel<MTLJSONSerializing>
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *email;
@end

并且为了在领域中保持该模型,我必须声明从 RLMObject 扩展的第二个接口:

@interface RLMUser:RLMObject
@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *email;
@end

如您所见,我必须实现另一种类型的User类,因为我必须扩展 RLMObject

有没有办法避免这种重复?

2 个答案:

答案 0 :(得分:3)

嗯,你可以尝试创建一个单独的类,只要RLMObject是最高的超类(例如User&gt; MTLModel&gt; {{ 1}})并看看它是否有效。如果RLMObject仅通过键路径值对其数据起作用,则Realm可能能够像这样处理它。

但是说实话,如果你想确保两个类都按预期正常运行,最好不要将它们混合起来,只需在需要时复制数据。

值得庆幸的是,因为MTLModel个实例公开了它通过RLMObject对象持久保存的所有属性,所以您不需要手动手动复制每个属性,并且只需极少量的代码:

RLMObjectSchema

答案 1 :(得分:0)

基于使用协议的想法,我创建了一个超类(gist here):

@interface ModelBase : RLMObject <MTLJSONSerializing, MTLModel>

然后,如@David Snabel-Caunt所说,我最终实现了MTLModel类的某些功能(来自MTLModel.m的复制粘贴)。

最后要使用它,您只需对其进行子类化。