背景
在client编程中。字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入。且无法处理类型转换、key与属性名不正确应、深度注入等问题,笔者从Masonry得到启示,开发了一个通过链式配置注入器实现深度注入、类型转换、key-属性名映射等功能的轻量级注入框架SuperKVC。眼下已经开源到GitHub,点击这里前往。欢迎Star和Fork。欢迎和我一起完好这个框架!
本文将从应用和原理两个角度介绍SuperKVC
使用方法
该框架与Masonry相似,要求用户在相关方法參数的block中通过链式编程的方法配置注入器參数,比如配置要创建和注入的class、类型转换器、名称映射等,然后方法会返回注入后的结果。假设JSON的根元素为字典,则返回一个模型实例。假设JSON的根元素为数组,则返回一个模型数组。
浅注入演示样例
假设我们有例如以下的JSON。要注入到UserModel中。
{
"id": 100075,
"name": "Greedy",
"birthday": "1993-03-06",
"isVip": true,
"partners": [100236, 100244, 100083]
}
@interface UserModel : NSObject
@property (nonatomic, assign) int64_t userId;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) NSDate *birthday;
@property (nonatomic, assign) BOOL isVip;
@property (nonatomic, strong) NSArray *partners;
@end
注意到这里的几个“坑点”,响应的id
相应的是模型的userId
。响应的birthday
类型为NSString
,而模型的birthday
类型为NSDate
。使用SuperKVC进行注入的代码例如以下。
// responseObject is a JSONObject(NSDictionary).
UserModel *userModel = [responseObject sk_injectWithInjector:^(SuperKVCInjector *injector) {
// 配置要生成和注入的模型实例类型
injector.bind([UserModel class]);
// 配置key到属性名的映射
injector.mapping(@"id").to(@"userId");
// 配置类型转换
injector.format(@"birthday").with.converter(^NSDate* (NSString *birthdayString) {
Android Studio 使用图片
Android 笔记一:线性布局
Qt笔记——右键菜单
Qt笔记——连接第三方库&用libZPlay库获取音频文件的艺术家、专辑等信息
git常用命令总结
Qt项目——数字内容管理系统的参考资料和细节
.Net转Java自学之路—基础巩固篇二十二(XML)
.Net转Java自学之路—基础巩固篇二十一(模块化思想)
.Net转Java自学之路—基础巩固篇二十(Lambda)
- 最新文章
-
SQL游标造数据
SQL游标
SQL基础2
SQL基础查询
shell基础脚本
linux命令基础
Centos虚拟机安装指南
Octave安装
R多线程并行计算
Windows与Linux之间的文件自动同步
- 热门文章
-
Linux下ftp服务器搭建
R执行报错:Error in `[<-.ts`(`*tmp*`,...only replacement of elements is allowed
R语法:<<-为全局变量赋值
Windows下基于Python3安装Ipython Notebook(即Jupyter)。python –m pip install XXX
linux-top命令查看内存CPU
pandas数据结构:Series/DataFrame;python函数:range/arange
Rserve详解,R语言客户端RSclient【转】
ROS 笔记 程序包/节点/topic
C51 keil 注意事项
Qt Widgets Application可执行程序发布方式