美文网首页iOS CraziesiOS学习
JSONModel 忽略一些字段

JSONModel 忽略一些字段

作者: hehtao | 来源:发表于2017-03-20 13:20 被阅读3446次

    这里要说的重点不是在与JsonModel 本身有的方法的常规写法,而是如何全局忽略无关属性.(每个Model 都写一下下面的方法,岂不是很蛋(^))

    方式一.可选属性 (就是说这个属性可以为null或者为空)

    {
      "id": "123",
      "name": null,
      "price": 12.95
    }
    @interface ProductModel : JSONModel
    @property (assign, nonatomic) int id;
    @property (strong, nonatomic) NSString<Optional>* name;
    @property (assign, nonatomic) float price;
    @property (strong, nonatomic) NSNumber<Optional>* uuid;
    @end
    
    @implementation ProductModel
    @end
    

    方式二.忽略属性 (就是完全忽略这个属性)

    {
      "id": "123",
      "name": null
    }
    @interface ProductModel : JSONModel
    @property (assign, nonatomic) int id;
    @property (strong, nonatomic) NSString<Ignore>* customProperty;
    @end
    
    @implementation ProductModel
    @end
    

    方式三.设置所有的属性为可选(所有属性值可以为空)

    @implementation ProductModel
    +(BOOL)propertyIsOptional:(NSString*)propertyName
    {
      return YES;
    }
    @end
    

    重点在这里 propertyIsOptional方法默认返回的是NO;拦截该方法,使其返回YES.(当然,如果你修改JsonModel 源码,当我没说)

    #import "objc/runtime.h"
    @implementation  JSONModel (SafeJSONModel)
    
    +(void)load{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            SEL org_Selector = @selector(propertyIsOptional:);
            SEL dt_Selector  = @selector(dt_propertyIsOptional:);
            
            Method org_method = class_getClassMethod([self class], org_Selector);
            Method dt_method  = class_getClassMethod([self class], dt_Selector);
            
            class_addMethod(self, org_Selector, method_getImplementation(dt_method), method_getTypeEncoding(dt_method));
    //        if (isAdd) {
    //            class_replaceMethod(self, dt_Selector, method_getImplementation(org_method), method_getTypeEncoding(org_method));
    //        }else{
                method_exchangeImplementations(org_method, dt_method);
    //        }
            
        });
    }
    +(BOOL)dt_propertyIsOptional:(NSString *)propertyName{
        [self dt_propertyIsOptional:propertyName];
        return YES;
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:JSONModel 忽略一些字段

        本文链接:https://www.haomeiwen.com/subject/hygbnttx.html