RHRedict 0.1.0

RHRedict 0.1.0

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布上次发布2015年3月

RJ Haydt维护。



RHRedict 0.1.0

  • 作者:
  • RJ Haydt

REwriteDICTionary:一个类,用于描述如何通过指定输入字典的依赖关系的重写规则生成键值对的字典。它是与序列化/反序列化服务器请求/响应关联的字典进行交互的简便方法。

RHRedict 对象包含一组重写规则。与其它方法不同,重写规则从输出键映射回所依赖的输入键路径。例如,此片段生成包含以下键的字典:testName,latitude,longitude。

redict = [RHRedict new];
[redict addRuleForKey:@"testName" valueOfKeyPath:@"test_name" required:YES];
[redict addRuleForKey:@"latitude" valueOfKeyPath:@"location.lat" required:YES];
[redict addRuleForKey:@"longitude" valueOfKeyPath:@"location.long" required:YES];

将每个规则映射到特定的输出键使得结果字典的结构更加清晰。

Rewrite 对象可以重用,但转换操作并不是可重入的。例如,您可以重用单个 redict 对象,按顺序处理数组中的每个元素。

入门指南

使用方法非常简单。创建一个新的 redict 实例,添加您的规则,并将实例应用于输入字典。

重写规则

一个简单的重写规则只需在输出字典中设置一个键,其值为输入字典中键路径的值。例如

[redict addRuleForKey:@"testName"
    valueOfKeyPath:@"test_name" required:YES];

一个更复杂的规则通过使用一个 block 处理输入字典的一个或多个值生成输出字典中的一个键。输出字典中键的值设置为值Using block 返回的对象。例如

[redict addRuleForKey:@"location"
    valueOfKeyPaths:@[@"latitude",@"longitude"]
        required:YES
        valueUsing:^id(RHRewriteRule *rule,
        NSDictionary *sourceDictionary) {
        // generate a subdictionary for location with the lat,long
        return @[
        @"lat": sourceDictionary[@"latitude"],
        @"long": sourceDictionary[@"longitude"]];
}];

所需的标志表示在输出字典中是否预期存在关键字。

值使用块

值使用块允许对规则键的值进行完全自定义生成。块参数是该规则本身和输入字典。从规则中,您可以得到键名和输入键路径。使用输入键路径和源字典,您可以生成包括字典、数组或任何其他合适的 NSDictionary 值在内的任何对象值。返回 nil 以防止为键创建字典条目。

NSDictionary+RHRedict 扩展提供了一些有用的方法,用于类型检查、转换、值检查和默认值。

转换字典

简单的转换只需应用规则并生成一个新的包含所有所需键的新字典。例如

NSDictionary *usefulResults = [redict dictionaryFrom:responseDictionary];

或者,有一种变体允许在应用所有规则之后进行后处理。即便存在缺失的键,完成块也会始终被调用。redictResults 包含应用重写规则到输入字典的结果。完成块可以返回这些结果或其修改后的版本,也可以只返回 nil。例如

NSDictionary *usefulResults = [redict 
    dictionaryFrom:responseDictionary 
    completion:^id(NSDictionary *redictResults, NSSet *missingKeys) { ...
}];

missingKeys 集合包含所有在结果字典中缺失的必需键的列表。如果所有必需键均存在于结果中,则其值为 nil。

选项

addRuleForKey 方法返回新生成的规则的引用。任何规则都可以选择提供缺失值块。仅在规则标记为必需且键在所有规则处理完毕后的 redictResults 中缺失时才会调用该块。规则缺失值属性块的行为与 valueUsing 块相同。

redict 对象可以可选地提供一个块来处理输入字典中规则未引用的键。该块可按其意愿为每个输入字典键生成输出条目。defaultRule 块的行为与 valueUsing 块相同。传递给块的 "rule" 是自动为输入字典中任何未引用的键生成的。

完整的处理顺序为:处理所有输入字典键路径存在的规则;使用默认规则对任何未引用的输入键进行处理;生成缺失值以供任何未出现在结果中的必需键使用;最后,调用完成块并传递规则结果及任何缺失键。

使用说明

该示例使用 Google 地点检索一组地点。您需要获取一个 API 密钥。请遵循以下开发者步骤:http://developers.google.com/places/documentation/index 设置您的控制台,获取“浏览器应用程序密钥”并启用对服务的访问(iOS 应用程序密钥不适用于 Google 地点)。

要运行示例项目,请克隆存储库,并在 Example 目录下运行 pod install

您只需编辑 RHViewController 并用您的 API 密钥字符串替换 REDICT_GOOGLE_PLACE_KEY。或者,如果您创建了一个名为 GOOGLE_PLACES_KEY 的环境变量,其中包含 API 密钥,则不必编辑源代码。您可以按照以下方式设置环境变量:

GOOGLE_PLACES_KEY="TheBrowserApplicationKeyFromYourGoogleConsole"
export GOOGLE_PLACES_KEY

无论哪种方式,一旦您在 Google 上设置好了并且有了您的 API 密钥,您可以简单地构建/运行示例。

需求

pod 本身没有依赖。示例依赖于 AFNetworking 和当然,Google 地点 API。

安装

作者

RJ Haydt,technotes AT icloud DOT com

许可

RHRedict 可在 BSD 许可证下使用。有关更多信息,请参阅 LICENSE 文件。