我有一个简单的场景,我想用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 。
有没有办法避免这种重复?
答案 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的复制粘贴)。
最后要使用它,您只需对其进行子类化。