Mantle-HAL 1.1.0

Mantle-HAL 1.1.0

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布上次发布2015年7月

Simon Rice维护。



Mantle-HAL是Objective-C的HAL解析器。与其他HAL解析器不同,它为您设置强类型资源和链接!

Mantle-HAL运行在Mantle之上,Mantle是一个非常易于使用的流行JSON模型解析器,由GitHub编写和维护!与Mantle类似,Mantle-HAL自动提供对<NSCoding><NSCopying>-isEqual:-hash的实现。如果您可以使用Mantle,您就可以使用Mantle-HAL!

使用Mantle-HAL,您可以使用您想使用的任何http库,如果有的话!唯一的依赖项是Mantle本身。作为免责声明,我必须声明这是Mantle的一个非官方扩展!

入门

将Mantle-HAL添加到您的项目中最简单的方法是使用CocoaPods。一旦在您的项目中设置好并运行,只需将pod "Mantle-HAL"添加到您的Podfile中即可。

然后运行code>pod install来安装依赖项,并使用此处的code>xcworkspace

还有一个小型示例项目,该项目基于HAL Talk运行,还有一些基于一些常见的HAL资源示例的测试。

资源

HAL的核心是资源。MTLHALResource是Mantle-HAL中所有资源的基类。它包含一个链接字典,以及两个进一步的功能来访问任何嵌入的资源

  • - (MTLHALResource *)resourceForRelation
  • - (NSArray *)resourcesForRelation

其中relation是一个包含在您的JSON中指定的嵌入关系的键的字符串

您的资源应继承自MTLHALResource并提供您自己的属性。

例如,一个Address资源可能如下所示

 #import <Mantle-HAL/MTLHALResource.h>

 @interface Address : MTLHALResource

 @property (nonatomic, strong) NSString *street;
 @property (nonatomic, strong) NSString *city;
 @property (nonatomic, strong) NSString *state;

 @end

现在这个资源可以来自表示JSON数据的NSDictionary对象。将此字典转换为地址与Mantle中的完全一样

 Address *address = [MTLJSONAdapter modelOfClass:Address.class fromJSONDictionary:addressJSONDictionary error:&error];

现在资源可以嵌入在不同的资源中。然而,Mantle-HAL允许这些嵌入的资源也是强类型的。在将任何HAL资源(例如,在您的App Delegate中)转换为其他类型之前,您应该将这些类注册到相关的关系中 - 这是通过MTLHALResource的类方法- registerClass: forRelation:完成的。例如,假设您的资源可以有addr:workaddr:home,它们都表示地址对象

 [MTLHALResource registerClass:Address.class forRelation:@"addr:home"];
 [MTLHALResource registerClass:Address.class forRelation:@"addr:work"];

现在,每当您使用这些关系之一获取嵌入的资源时,您将获得地址对象!

最后一点非常重要——如果您在资源中使用了+ JSONKeyPathsByPropertyKey,请确保在返回的字典中包含[super JSONKeyPathsByPropertyKey]的结果,否则您的链接和嵌入式资源将不会被包含在资源中。

链接

HAL资源可以包含任意数量的链接。MTLHALResource提供名为links的字典。键表示链接的名称,值是一个MTLHALLink对象数组。MTLHALLink是用于表示链接的对象,它完全符合HAL规范的链接部分。

CURIEs

如果您需要CURIEs,Mantle-HAL完全支持它们。它们可以传递给嵌入式资源或被重写。要获取特定关系的CURIE URL,MTLHALResource提供了- extendedHrefForRelation:,它返回包含关系信息的URL。

Swift支持

Mantle目前不支持Swift对象,因此您必须使用Objective-C编写资源或使用@objc来前缀您的类。

贡献

正如大家所说,GitHub是关于社交编码——我之所以选择使用它,不仅仅是因为我喜欢Git作为版本控制系统。请积极提供帮助,让这个项目变得更加出色,或者如果您发现任何错误,甚至可以提交一个问题。

对于v1.1,必须给予@remixnine额外的认可,他为项目做出了多项贡献和错误修复。

许可证

在MIT许可证下提供使用。请参阅LICENSE文件或任何类的头部以获取详细信息。