zoukankan      html  css  js  c++  java
  • iOS端JSON转Model链式编程框架SuperKVC使用方法与原理

    背景

    在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) {
    
  • 相关阅读:
    [Oracle]如何为数据库设置Event(eg: ORA-00235)
    [Oracle]如何为数据库设置Event(eg: ORA-00235)
    C++常用字符串分割方法实例汇总
    C++常用字符串分割方法实例汇总
    C#学习笔记——常量、字段以及事件
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    混淆电路Garbled Circuit介绍
    安全计算实现方法概览
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7348052.html
Copyright © 2011-2022 走看看