Mantle-HAL 是一个 Objective-C 的 HAL 解析器。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 中。
然后运行 pod install
以安装依赖项,并从此使用 xcworkspace
。
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:work
和 addr:home
,都表示 Address 对象
[MTLHALResource registerClass:Address.class forRelation:@"addr:home"];
[MTLHALResource registerClass:Address.class forRelation:@"addr:work"];
现在,无论您使用哪个联系检索嵌入资源,您都会得到地址对象!
最后一点非常重要 - 如果您的资源使用了+ JSONKeyPathsByPropertyKey
,请确保在返回的字典中包含[super JSONKeyPathsByPropertyKey]
的结果,否则您的链接和嵌入式资源将不会包含在资源中。
HAL资源可以包含任意数量的链接。MTLHALResource
提供了一个名为links
的字典。键表示链接的名称,值是一个MTLHALLink
对象的数组。MTLHALLink
是一个用于表示链接的对象,完全符合HAL规范的链接部分。
如果您需要它们,Mantle-HAL完全支持CURIEs。它可以传递到嵌入式资源或被覆盖。要获取特定关系的CURIE URL,MTLHALResource
提供了- extendedHrefForRelation:
方法,该方法返回包含关系信息的URL。
Mantle当前无法与Swift对象一起工作,因此您目前必须使用Objective-C编写资源。然而,如果它们已经在您的桥接头中包含,您就可以在Swift中使用所有资源。
正如大家所说,GitHub是关于社交编码 - 我之所以选择使用它,不仅仅是因为我喜欢git作为版本控制系统。请积极贡献,帮助使这个项目更加完善,或者如果您看到任何不正常工作的内容,请提交一个问题。
在MIT许可证下提供使用。请参阅LICENSE
文件或任何类头以获取全部详细信息。