ClassMapper 0.0.2

ClassMapper 0.0.2

测试测试通过
语言语言 Obj-CObjective C
许可证 BSD
发布时间最后发布2014年12月

未归属 维护。



  • 作者:
  • Pat Shields

ClassMapper 是一个简单的 obj-c 库,用于将遵循键值编码 (KVC) 约定的类转换为其他对象。按照惯例,这些对象是 Foundation 对象,如 NSDictionaryNSArray。它是高度可扩展的,只包含足够的 batteries 来完成平均的 JSON -> Model 转换。它受到了 RestKit 的启发,包含了类似的功能。但 RestKit 显然更多是在框架方面,而 ClassMapper 希望与其它库一起使用。它是你可能会自己编写的代码片段,但现在我们都可以分享一个版本。

Stuart Sierra 的话来说:编写库,而不是框架。

API

ClassMapper

ClassMapper 有两个主要方法,序列化和反序列化。序列化相对简单

+ (id)serialize:(id<Serializable>)obj;
// e.g.
Foo *foo = [Foo new];
foo.aString = @"Woohoo";
[ClassMapper serialize:foo]; //NSDictionary, {"aString":"Woohoo"}

当然,没有反序列化能力,这就不好玩了

+ (id)deserialize:(id<Mappable>)serialized toInstance:(id)instance;
// e.g.
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"Woohoo" forKey:@"aString"];
Foo *foo = [Foo new];
foo.aString = @"NOOOOOO!!!";
[ClassMapper deserialize:dict toInstance:foo]; //Foo.aString == @"Woohoo";

为了方便,您也可以允许 ClassMapper 为您创建对象

+ (id)deserialize:(id<Mappable>)serialized toClass:(Class)classType;

想了解更多关于这些命令的信息,请访问 wiki

MapperConfig

MapperConfig 单例允许您修改序列化/反序列化过程的一部分。

请查看 wiki 中的 MapperConfig 选项。

使用方法

ClassMapper 正式支持 CocoaPods。您可以在仓库中找到我们的 spec。

您还可以手动添加 ClassMapper,无论是作为源代码还是(最好是)静态库。请注意两点:

  • ClassMapper 使用 ARC,因此如果您不使用 ARC,最佳选择是将它作为静态库包含进来。
  • 如果您使用的是静态库,则必须在 xcodeproj 中的“其他链接器标志”中添加 -ObjC 标志。请参阅有关关联的苹果问答(http://developer.apple.com/library/mac/#qa/qa1490/_index.html),以更好地理解为什么需要此链接器标志。

状态

我已经在多个项目中使用过 ClassMapper,并且相当满意。我们还需要添加一些支持的功能,但如果 ClassMapper 满足您的当前需求,我不认为 API 会发生重大变化,您不需要在您的代码中进行大的修改。

虽然我们没有 100% 的测试覆盖率,但是这个库经过了广泛的测试。测试/代码比值通常在 1:1 左右,通常更加倾向于测试。

有关更多信息,您可以在 ClassMapper.org 文件(emacs org-mode)中查看。

授权

BSD协议,尽善尽美。详情请参阅LICENSE文件。

类似项目

  • KeyValueObjectMapping是一个更侧重于约定而非配置的系统。我没有深入研究,但看起来它是一个内置更多功能但扩展性较差的方法。它也可以在cocoapods上找到。