iOS端JSON转Model链式编程框架SuperKVC使用方法与原理
2017-08-11 21:17
633 查看
背景
在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) {
相关文章推荐
- iOS端JSON转Model链式编程框架SuperKVC用法与原理
- iOS开发中JsonModel使用方法 详解
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- iOS编程技巧总结之语音篇(三)- OpenEars框架及其使用2
- Django框架中使用json格式序列化与反序列化QuerySet和Model
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- 【无限互联】IOS框架研究之SDWebImage的原理以及使用流程
- iOS 图片缓存框架SDWebImage使用方法(欢迎提建议和分享遇到的问题)
- iOS编程技巧总结之语音篇-- OpenEars框架及其使用1
- AFNetworking和JSONModel组合成 IOS 底层网络框架
- sniffer技术原理及应用,包括编程方法和工具使用
- iOS的alamofire框架的json解析方法,服务器传过来的json格式一定要是标准的格式,否则会报以下错误
- JsonModel的使用(ios程序员必须熟练掌握,太激动了)
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- iOS银联支付原理及接口调用方法(参考2.0.0使用指南)
- ios 中代理原理使用方法精讲
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法